diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/Metadata.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/Metadata.java index 1b33704ab7..be63760d16 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/Metadata.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/Metadata.java @@ -24,148 +24,8 @@ package org.hibernate.metamodel.source; -import java.io.File; -import java.io.InputStream; -import java.net.URL; - -import org.w3c.dom.Document; - /** * @author Steve Ebersole */ public interface Metadata { - /** - * Read metadata from the annotations attached to the given class. - * - * @param annotatedClass The class containing annotations - * - * @return this (for method chaining) - */ - public Metadata addAnnotatedClass(Class annotatedClass); - - /** - * Read package-level metadata. - * - * @param packageName java package name - * - * @return this (for method chaining) - */ - public Metadata addPackage(String packageName); - - /** - * Read mappings as a application resourceName (i.e. classpath lookup). - * - * @param name The resource name - * - * @return this (for method chaining purposes) - */ - public Metadata addResource(String name); - - /** - * Read a mapping as an application resource using the convention that a class named {@code foo.bar.Foo} is - * mapped by a file named {@code foo/bar/Foo.hbm.xml} which can be resolved as a classpath resource. - * - * @param entityClass The mapped class - * - * @return this (for method chaining purposes) - */ - public Metadata addClass(Class entityClass); - - /** - * Read mappings from a particular XML file - * - * @param path The path to a file. Expected to be resolvable by {@link File#File(String)} - * - * @return this (for method chaining purposes) - * - * @see #addFile(java.io.File) - */ - public Metadata addFile(String path); - - /** - * Read mappings from a particular XML file - * - * @param file The reference to the XML file - * - * @return this (for method chaining purposes) - */ - public Metadata addFile(File file); - - /** - * See {@link #addCacheableFile(java.io.File)} for description - * - * @param path The path to a file. Expected to be resolvable by {@link File#File(String)} - * - * @return this (for method chaining purposes) - * - * @see #addCacheableFile(java.io.File) - */ - public Metadata addCacheableFile(String path); - - /** - * Add a cached mapping file. A cached file is a serialized representation of the DOM structure of a - * particular mapping. It is saved from a previous call as a file with the name {@code {xmlFile}.bin} - * where {@code {xmlFile}} is the name of the original mapping file. - *

- * If a cached {@code {xmlFile}.bin} exists and is newer than {@code {xmlFile}}, the {@code {xmlFile}.bin} - * file will be read directly. Otherwise {@code {xmlFile}} is read and then serialized to {@code {xmlFile}.bin} for - * use the next time. - * - * @param file The cacheable mapping file to be added, {@code {xmlFile}} in above discussion. - * - * @return this (for method chaining purposes) - */ - public Metadata addCacheableFile(File file); - - /** - * Read metadata from an {@link InputStream}. - * - * @param xmlInputStream The input stream containing a DOM. - * - * @return this (for method chaining purposes) - */ - public Metadata addInputStream(InputStream xmlInputStream); - - - /** - * Read mappings from a {@link URL} - * - * @param url The url for the mapping document to be read. - * - * @return this (for method chaining purposes) - */ - public Metadata addURL(URL url); - - /** - * Read mappings from a DOM {@link Document} - * - * @param doc The DOM document - * - * @return this (for method chaining purposes) - */ - public Metadata addDocument(Document doc); - - - /** - * Read all mappings from a jar file. - *

- * Assumes that any file named *.hbm.xml is a mapping document. - * - * @param jar a jar file - * - * @return this (for method chaining purposes) - */ - public Metadata addJar(File jar); - - /** - * Read all mapping documents from a directory tree. - *

- * Assumes that any file named *.hbm.xml is a mapping document. - * - * @param dir The directory - * @return this (for method chaining purposes) - * @throws org.hibernate.MappingException Indicates problems reading the jar file or - * processing the contained mapping documents. - */ - public Metadata addDirectory(File dir); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/MetadataSources.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/MetadataSources.java new file mode 100644 index 0000000000..4c79860752 --- /dev/null +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/MetadataSources.java @@ -0,0 +1,347 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2011, Red Hat Inc. or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program 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 distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package org.hibernate.metamodel.source; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.jar.JarFile; +import java.util.zip.ZipEntry; + +import org.jboss.logging.Logger; +import org.w3c.dom.Document; +import org.xml.sax.EntityResolver; + +import org.hibernate.cfg.EJB3DTDEntityResolver; +import org.hibernate.cfg.EJB3NamingStrategy; +import org.hibernate.cfg.NamingStrategy; +import org.hibernate.metamodel.source.internal.JaxbHelper; +import org.hibernate.metamodel.source.internal.JaxbRoot; +import org.hibernate.metamodel.source.internal.MetadataImpl; +import org.hibernate.service.BasicServiceRegistry; +import org.hibernate.service.classloading.spi.ClassLoaderService; + +/** + * @author Steve Ebersole + */ +public class MetadataSources { + private static final Logger LOG = Logger.getLogger( MetadataSources.class ); + + private List jaxbRootList = new ArrayList(); + + private final JaxbHelper jaxbHelper; + + private final BasicServiceRegistry serviceRegistry; + private final EntityResolver entityResolver; + private final NamingStrategy namingStrategy; + + public MetadataSources(BasicServiceRegistry serviceRegistry) { + this( serviceRegistry, EJB3DTDEntityResolver.INSTANCE, EJB3NamingStrategy.INSTANCE ); + } + + public MetadataSources(BasicServiceRegistry serviceRegistry, EntityResolver entityResolver, NamingStrategy namingStrategy) { + this.serviceRegistry = serviceRegistry; + this.entityResolver = entityResolver; + this.namingStrategy = namingStrategy; + + this.jaxbHelper = new JaxbHelper( this ); + } + + public List getJaxbRootList() { + return jaxbRootList; + } + + public BasicServiceRegistry getServiceRegistry() { + return serviceRegistry; + } + + public NamingStrategy getNamingStrategy() { + return namingStrategy; + } + + public Metadata buildMetadata() { + return new MetadataImpl( this ); + } + + /** + * Read metadata from the annotations attached to the given class. + * + * @param annotatedClass The class containing annotations + * + * @return this (for method chaining) + */ + public MetadataSources addAnnotatedClass(Class annotatedClass) { + return this; // todo : implement method body + } + + /** + * Read package-level metadata. + * + * @param packageName java package name + * + * @return this (for method chaining) + */ + public MetadataSources addPackage(String packageName) { + return this; // todo : implement method body + } + + /** + * Read mappings as a application resourceName (i.e. classpath lookup). + * + * @param name The resource name + * + * @return this (for method chaining purposes) + */ + public MetadataSources addResource(String name) { + LOG.tracef( "reading mappings from resource : %s", name ); + + final Origin origin = new Origin( SourceType.RESOURCE, name ); + InputStream resourceInputStream = classLoaderService().locateResourceStream( name ); + if ( resourceInputStream == null ) { + throw new MappingNotFoundException( origin ); + } + add( resourceInputStream, origin, true ); + + return this; + } + + private ClassLoaderService classLoaderService() { + return serviceRegistry.getService( ClassLoaderService.class ); + } + + private JaxbRoot add(InputStream inputStream, Origin origin, boolean close) { + try { + JaxbRoot jaxbRoot = jaxbHelper.unmarshal( inputStream, origin ); + jaxbRootList.add( jaxbRoot ); + return jaxbRoot; + } + finally { + if ( close ) { + try { + inputStream.close(); + } + catch ( IOException ignore ) { + LOG.trace( "Was unable to close input stream" ); + } + } + } + } + + /** + * Read a mapping as an application resource using the convention that a class named {@code foo.bar.Foo} is + * mapped by a file named {@code foo/bar/Foo.hbm.xml} which can be resolved as a classpath resource. + * + * @param entityClass The mapped class + * + * @return this (for method chaining purposes) + */ + public MetadataSources addClass(Class entityClass) { + LOG.debugf( "adding resource mappings from class convention : %s", entityClass.getName() ); + final String mappingResourceName = entityClass.getName().replace( '.', '/' ) + ".hbm.xml"; + addResource( mappingResourceName ); + return this; + } + + /** + * Read mappings from a particular XML file + * + * @param path The path to a file. Expected to be resolvable by {@link File#File(String)} + * + * @return this (for method chaining purposes) + * + * @see #addFile(java.io.File) + */ + public MetadataSources addFile(String path) { + return addFile( new File( path ) ); + } + + /** + * Read mappings from a particular XML file + * + * @param file The reference to the XML file + * + * @return this (for method chaining purposes) + */ + public MetadataSources addFile(File file) { + final String name = file.getAbsolutePath(); + LOG.tracef( "reading mappings from file : %s", name ); + final Origin origin = new Origin( SourceType.FILE, name ); + try { + add( new FileInputStream( file ), origin, true ); + } + catch ( FileNotFoundException e ) { + throw new MappingNotFoundException( e, origin ); + } + return this; + } + + /** + * See {@link #addCacheableFile(java.io.File)} for description + * + * @param path The path to a file. Expected to be resolvable by {@link File#File(String)} + * + * @return this (for method chaining purposes) + * + * @see #addCacheableFile(java.io.File) + */ + public MetadataSources addCacheableFile(String path) { + return this; // todo : implement method body + } + + /** + * Add a cached mapping file. A cached file is a serialized representation of the DOM structure of a + * particular mapping. It is saved from a previous call as a file with the name {@code {xmlFile}.bin} + * where {@code {xmlFile}} is the name of the original mapping file. + *

+ * If a cached {@code {xmlFile}.bin} exists and is newer than {@code {xmlFile}}, the {@code {xmlFile}.bin} + * file will be read directly. Otherwise {@code {xmlFile}} is read and then serialized to {@code {xmlFile}.bin} for + * use the next time. + * + * @param file The cacheable mapping file to be added, {@code {xmlFile}} in above discussion. + * + * @return this (for method chaining purposes) + */ + public MetadataSources addCacheableFile(File file) { + return this; // todo : implement method body + } + + /** + * Read metadata from an {@link InputStream}. + * + * @param xmlInputStream The input stream containing a DOM. + * + * @return this (for method chaining purposes) + */ + public MetadataSources addInputStream(InputStream xmlInputStream) { + add( xmlInputStream, new Origin( SourceType.INPUT_STREAM, "" ), false ); + return this; + } + + /** + * Read mappings from a {@link URL} + * + * @param url The url for the mapping document to be read. + * + * @return this (for method chaining purposes) + */ + public MetadataSources addURL(URL url) { + final String urlExternalForm = url.toExternalForm(); + LOG.debugf( "Reading mapping document from URL : %s", urlExternalForm ); + + final Origin origin = new Origin( SourceType.URL, urlExternalForm ); + try { + add( url.openStream(), origin, true ); + } + catch ( IOException e ) { + throw new MappingNotFoundException( "Unable to open url stream [" + urlExternalForm + "]", e, origin ); + } + return this; + } + + /** + * Read mappings from a DOM {@link Document} + * + * @param document The DOM document + * + * @return this (for method chaining purposes) + */ + public MetadataSources addDocument(Document document) { + final Origin origin = new Origin( SourceType.DOM, "" ); + JaxbRoot jaxbRoot = jaxbHelper.unmarshal( document, origin ); + jaxbRootList.add( jaxbRoot ); + return this; + } + + /** + * Read all mappings from a jar file. + *

+ * Assumes that any file named *.hbm.xml is a mapping document. + * + * @param jar a jar file + * + * @return this (for method chaining purposes) + */ + public MetadataSources addJar(File jar) { + LOG.debugf( "Seeking mapping documents in jar file : %s", jar.getName() ); + final Origin origin = new Origin( SourceType.JAR, jar.getAbsolutePath() ); + try { + JarFile jarFile = new JarFile( jar ); + try { + Enumeration jarEntries = jarFile.entries(); + while ( jarEntries.hasMoreElements() ) { + final ZipEntry zipEntry = (ZipEntry) jarEntries.nextElement(); + if ( zipEntry.getName().endsWith( ".hbm.xml" ) ) { + LOG.tracef( "found mapping document : %s", zipEntry.getName() ); + try { + add( jarFile.getInputStream( zipEntry ), origin, true ); + } + catch (Exception e) { + throw new MappingException( "could not read mapping documents", e, origin ); + } + } + } + } + finally { + try { + jarFile.close(); + } + catch (Exception ignore) { + } + } + } + catch (IOException e) { + throw new MappingNotFoundException( e, origin ); + } + return this; + } + + /** + * Read all mapping documents from a directory tree. + *

+ * Assumes that any file named *.hbm.xml is a mapping document. + * + * @param dir The directory + * @return this (for method chaining purposes) + * @throws org.hibernate.MappingException Indicates problems reading the jar file or + * processing the contained mapping documents. + */ + public MetadataSources addDirectory(File dir) { + File[] files = dir.listFiles(); + for ( File file : files ) { + if ( file.isDirectory() ) { + addDirectory( file ); + } + else if ( file.getName().endsWith( ".hbm.xml" ) ) { + addFile( file ); + } + } + return this; + } +} diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/JaxbHelper.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/JaxbHelper.java index 8593824d8c..1e153ee10e 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/JaxbHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/JaxbHelper.java @@ -48,6 +48,7 @@ import org.w3c.dom.Element; import org.xml.sax.SAXException; import org.hibernate.metamodel.source.MappingException; +import org.hibernate.metamodel.source.MetadataSources; import org.hibernate.metamodel.source.Origin; import org.hibernate.metamodel.source.XsdException; import org.hibernate.metamodel.source.annotation.xml.EntityMappings; @@ -57,15 +58,15 @@ import org.hibernate.service.classloading.spi.ClassLoaderService; /** * @author Steve Ebersole */ -class JaxbHelper { +public class JaxbHelper { private static final Logger log = Logger.getLogger( JaxbHelper.class ); public static final String ASSUMED_ORM_XSD_VERSION = "2.0"; - private final MetadataImpl metadata; + private final MetadataSources metadataSources; - JaxbHelper(MetadataImpl metadata) { - this.metadata = metadata; + public JaxbHelper(MetadataSources metadataSources) { + this.metadataSources = metadataSources; } public JaxbRoot unmarshal(InputStream stream, Origin origin) { @@ -233,7 +234,7 @@ class JaxbHelper { } private Schema resolveLocalSchema(String schemaName, String schemaLanguage) { - URL url = metadata.getServiceRegistry().getService( ClassLoaderService.class ).locateResource( schemaName ); + URL url = metadataSources.getServiceRegistry().getService( ClassLoaderService.class ).locateResource( schemaName ); if ( url == null ) { throw new XsdException( "Unable to locate schema [" + schemaName + "] via classpath", schemaName ); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataImpl.java index 8f385657e6..31b13801cf 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/source/internal/MetadataImpl.java @@ -23,28 +23,13 @@ */ package org.hibernate.metamodel.source.internal; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; import java.io.Serializable; -import java.net.URL; -import java.util.ArrayList; -import java.util.Enumeration; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.jar.JarFile; -import java.util.zip.ZipEntry; import org.jboss.logging.Logger; -import org.w3c.dom.Document; -import org.xml.sax.EntityResolver; import org.hibernate.DuplicateMappingException; -import org.hibernate.cfg.EJB3DTDEntityResolver; -import org.hibernate.cfg.EJB3NamingStrategy; import org.hibernate.cfg.NamingStrategy; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.mapping.FetchProfile; @@ -52,16 +37,12 @@ import org.hibernate.mapping.MetadataSource; import org.hibernate.metamodel.binding.EntityBinding; import org.hibernate.metamodel.binding.PluralAttributeBinding; import org.hibernate.metamodel.relational.Database; -import org.hibernate.metamodel.source.MappingException; -import org.hibernate.metamodel.source.MappingNotFoundException; import org.hibernate.metamodel.source.Metadata; -import org.hibernate.metamodel.source.Origin; -import org.hibernate.metamodel.source.SourceType; +import org.hibernate.metamodel.source.MetadataSources; import org.hibernate.metamodel.source.annotations.AnnotationBinder; import org.hibernate.metamodel.source.hbm.HibernateXmlBinder; import org.hibernate.metamodel.source.spi.MetadataImplementor; import org.hibernate.service.BasicServiceRegistry; -import org.hibernate.service.classloading.spi.ClassLoaderService; /** * Container for configuration data while building and binding the metamodel @@ -72,44 +53,30 @@ public class MetadataImpl implements Metadata, MetadataImplementor, Serializable private static final CoreMessageLogger LOG = Logger.getMessageLogger( CoreMessageLogger.class, MetadataImpl.class.getName() ); private final BasicServiceRegistry serviceRegistry; + private final NamingStrategy namingStrategy; - private final Database database = new Database(); - -// private final MetadataSourceQueue metadataSourceQueue; - - private final JaxbHelper jaxbHelper; private final AnnotationBinder annotationBinder; private final HibernateXmlBinder hibernateXmlBinder; - private final EntityResolver entityResolver; - private final NamingStrategy namingStrategy; + private final Database database = new Database(); + private Map entityBindingMap = new HashMap(); private Map collectionBindingMap = new HashMap(); private Map fetchProfiles = new HashMap(); private Map imports; - public MetadataImpl(BasicServiceRegistry serviceRegistry) { - this( serviceRegistry, EJB3NamingStrategy.INSTANCE, EJB3DTDEntityResolver.INSTANCE ); - } + public MetadataImpl(MetadataSources metadataSources) { + this.serviceRegistry = metadataSources.getServiceRegistry(); + this.namingStrategy = metadataSources.getNamingStrategy(); - public MetadataImpl(BasicServiceRegistry serviceRegistry, NamingStrategy namingStrategy, EntityResolver entityResolver) { - this.serviceRegistry = serviceRegistry; - this.namingStrategy = namingStrategy; - this.entityResolver = entityResolver; - this.jaxbHelper = new JaxbHelper( this ); this.annotationBinder = new AnnotationBinder( this ); this.hibernateXmlBinder = new HibernateXmlBinder( this ); -// this.metadataSourceQueue = new MetadataSourceQueue( this ); } public BasicServiceRegistry getServiceRegistry() { return serviceRegistry; } - public EntityResolver getEntityResolver() { - return entityResolver; - } - public HibernateXmlBinder getHibernateXmlBinder() { return hibernateXmlBinder; } @@ -118,10 +85,6 @@ public class MetadataImpl implements Metadata, MetadataImplementor, Serializable return annotationBinder; } -// public MetadataSourceQueue getMetadataSourceQueue() { -// return metadataSourceQueue; -// } - public Database getDatabase() { return database; } @@ -188,175 +151,4 @@ public class MetadataImpl implements Metadata, MetadataImplementor, Serializable return profile; } - // Metadata contract ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - private List jaxbRootList = new ArrayList(); - - /** - * TODO : STRICTLY FOR TESTING PURPOSES, REMOVE AFTER JAXB AND BINDING STUFF HAS BEEN VALIDATED!!!!!!! - */ - public List getJaxbRootList() { - return jaxbRootList; - } - - @Override - public Metadata addAnnotatedClass(Class annotatedClass) { - return null; // todo : implement method body - } - - @Override - public Metadata addPackage(String packageName) { - return null; // todo : implement method body - } - - @Override - public Metadata addResource(String name) { - LOG.tracef( "reading mappings from resource : %s", name ); - - final Origin origin = new Origin( SourceType.RESOURCE, name ); - InputStream resourceInputStream = classLoaderService().locateResourceStream( name ); - if ( resourceInputStream == null ) { - throw new MappingNotFoundException( origin ); - } - add( resourceInputStream, origin, true ); - - return this; - } - - private ClassLoaderService classLoaderService() { - return serviceRegistry.getService( ClassLoaderService.class ); - } - - private JaxbRoot add(InputStream inputStream, Origin origin, boolean close) { - try { - JaxbRoot jaxbRoot = jaxbHelper.unmarshal( inputStream, origin ); - jaxbRootList.add( jaxbRoot ); - return jaxbRoot; - } - finally { - if ( close ) { - try { - inputStream.close(); - } - catch ( IOException ignore ) { - LOG.trace( "Was unable to close input stream" ); - } - } - } - } - - @Override - public Metadata addClass(Class entityClass) { - LOG.debugf( "adding resource mappings from class convention : %s", entityClass.getName() ); - final String mappingResourceName = entityClass.getName().replace( '.', '/' ) + ".hbm.xml"; - addResource( mappingResourceName ); - return this; - } - - @Override - public Metadata addFile(String path) { - return addFile( new File( path ) ); - } - - @Override - public Metadata addFile(File file) { - final String name = file.getAbsolutePath(); - LOG.tracef( "reading mappings from file : %s", name ); - final Origin origin = new Origin( SourceType.FILE, name ); - try { - add( new FileInputStream( file ), origin, true ); - } - catch ( FileNotFoundException e ) { - throw new MappingNotFoundException( e, origin ); - } - return this; - } - - @Override - public Metadata addCacheableFile(String path) { - return null; // todo : implement method body - } - - @Override - public Metadata addCacheableFile(File file) { - return null; // todo : implement method body - } - - @Override - public Metadata addInputStream(InputStream xmlInputStream) { - add( xmlInputStream, new Origin( SourceType.INPUT_STREAM, "" ), false ); - return this; - } - - @Override - public Metadata addURL(URL url) { - final String urlExternalForm = url.toExternalForm(); - LOG.debugf( "Reading mapping document from URL : %s", urlExternalForm ); - - final Origin origin = new Origin( SourceType.URL, urlExternalForm ); - try { - add( url.openStream(), origin, true ); - } - catch ( IOException e ) { - throw new MappingNotFoundException( "Unable to open url stream [" + urlExternalForm + "]", e, origin ); - } - return this; - } - - @Override - public Metadata addDocument(Document document) { - final Origin origin = new Origin( SourceType.DOM, "" ); - JaxbRoot jaxbRoot = jaxbHelper.unmarshal( document, origin ); - jaxbRootList.add( jaxbRoot ); - return this; - } - - @Override - public Metadata addJar(File jar) { - LOG.debugf( "Seeking mapping documents in jar file : %s", jar.getName() ); - final Origin origin = new Origin( SourceType.JAR, jar.getAbsolutePath() ); - try { - JarFile jarFile = new JarFile( jar ); - try { - Enumeration jarEntries = jarFile.entries(); - while ( jarEntries.hasMoreElements() ) { - final ZipEntry zipEntry = (ZipEntry) jarEntries.nextElement(); - if ( zipEntry.getName().endsWith( ".hbm.xml" ) ) { - LOG.tracef( "found mapping document : %s", zipEntry.getName() ); - try { - add( jarFile.getInputStream( zipEntry ), origin, true ); - } - catch (Exception e) { - throw new MappingException( "could not read mapping documents", e, origin ); - } - } - } - } - finally { - try { - jarFile.close(); - } - catch (Exception ignore) { - } - } - } - catch (IOException e) { - throw new MappingNotFoundException( e, origin ); - } - return this; - } - - @Override - public Metadata addDirectory(File dir) { - File[] files = dir.listFiles(); - for ( File file : files ) { - if ( file.isDirectory() ) { - addDirectory( file ); - } - else if ( file.getName().endsWith( ".hbm.xml" ) ) { - addFile( file ); - } - } - return this; - } } diff --git a/hibernate-core/src/test/java/org/hibernate/metamodel/binding/BasicAnnotationBindingTests.java b/hibernate-core/src/test/java/org/hibernate/metamodel/binding/BasicAnnotationBindingTests.java index 872004ae9d..90c09d0590 100644 --- a/hibernate-core/src/test/java/org/hibernate/metamodel/binding/BasicAnnotationBindingTests.java +++ b/hibernate-core/src/test/java/org/hibernate/metamodel/binding/BasicAnnotationBindingTests.java @@ -25,12 +25,16 @@ package org.hibernate.metamodel.binding; import java.io.IOException; import java.io.InputStream; +import java.util.Collections; import org.jboss.jandex.Index; import org.jboss.jandex.Indexer; -import org.junit.Test; +import org.hibernate.metamodel.source.MetadataSources; import org.hibernate.metamodel.source.internal.MetadataImpl; +import org.hibernate.service.internal.BasicServiceRegistryImpl; + +import org.junit.Test; import org.hibernate.testing.FailureExpected; @@ -57,7 +61,7 @@ public class BasicAnnotationBindingTests extends AbstractBasicBindingTests { public EntityBinding buildSimpleEntityBinding() { Index index = indexForClass( SimpleEntity.class ); - MetadataImpl metadata = new MetadataImpl( basicServiceRegistry() ); + MetadataImpl metadata = (MetadataImpl) new MetadataSources( new BasicServiceRegistryImpl( Collections.emptyMap() ) ).buildMetadata(); metadata.getAnnotationBinder().bindMappedClasses( index ); return metadata.getEntityBinding( SimpleEntity.class.getSimpleName() ); @@ -65,7 +69,7 @@ public class BasicAnnotationBindingTests extends AbstractBasicBindingTests { public EntityBinding buildSimpleVersionedEntityBinding() { Index index = indexForClass( SimpleEntity.class ); - MetadataImpl metadata = new MetadataImpl( basicServiceRegistry() ); + MetadataImpl metadata = (MetadataImpl) new MetadataSources( new BasicServiceRegistryImpl( Collections.emptyMap() ) ).buildMetadata(); metadata.getAnnotationBinder().bindMappedClasses( index ); return metadata.getEntityBinding( SimpleVersionedEntity.class.getSimpleName() ); diff --git a/hibernate-core/src/test/java/org/hibernate/metamodel/binding/BasicHbmBindingTests.java b/hibernate-core/src/test/java/org/hibernate/metamodel/binding/BasicHbmBindingTests.java index 6d91dbc210..f31e84ebf2 100644 --- a/hibernate-core/src/test/java/org/hibernate/metamodel/binding/BasicHbmBindingTests.java +++ b/hibernate-core/src/test/java/org/hibernate/metamodel/binding/BasicHbmBindingTests.java @@ -31,6 +31,7 @@ import org.hibernate.internal.util.xml.MappingReader; import org.hibernate.internal.util.xml.Origin; import org.hibernate.internal.util.xml.XMLHelper; import org.hibernate.internal.util.xml.XmlDocument; +import org.hibernate.metamodel.source.MetadataSources; import org.hibernate.metamodel.source.internal.MetadataImpl; import org.junit.Test; @@ -46,7 +47,7 @@ public class BasicHbmBindingTests extends AbstractBasicBindingTests { private static final Logger log = Logger.getLogger( BasicHbmBindingTests.class.getName() ); public EntityBinding buildSimpleEntityBinding() { - MetadataImpl metadata = new MetadataImpl( basicServiceRegistry() ); + MetadataImpl metadata = (MetadataImpl) new MetadataSources( basicServiceRegistry() ).buildMetadata(); XmlDocument xmlDocument = readResource( "/org/hibernate/metamodel/binding/SimpleEntity.hbm.xml" ); metadata.getHibernateXmlBinder().bindRoot( xmlDocument ); @@ -54,7 +55,7 @@ public class BasicHbmBindingTests extends AbstractBasicBindingTests { } public EntityBinding buildSimpleVersionedEntityBinding() { - MetadataImpl metadata = new MetadataImpl( basicServiceRegistry() ); + MetadataImpl metadata = (MetadataImpl) new MetadataSources( basicServiceRegistry() ).buildMetadata(); String fileName = "/org/hibernate/metamodel/binding/SimpleVersionedEntity.hbm.xml"; XmlDocument xmlDocument = readResource( fileName ); @@ -65,11 +66,11 @@ public class BasicHbmBindingTests extends AbstractBasicBindingTests { @Test public void testJaxbApproach() { - final MetadataImpl metadata = new MetadataImpl( basicServiceRegistry() ); - final String resourceName = "org/hibernate/metamodel/binding/SimpleVersionedEntity.xml"; - metadata.addResource( resourceName ); - assertEquals( 1, metadata.getJaxbRootList().size() ); + + MetadataSources metadataSources = new MetadataSources( basicServiceRegistry() ); + metadataSources.addResource( resourceName ); + assertEquals( 1, metadataSources.getJaxbRootList().size() ); } private XmlDocument readResource(final String name) { diff --git a/hibernate-core/src/test/java/org/hibernate/metamodel/source/annotations/OrmXmlParserTests.java b/hibernate-core/src/test/java/org/hibernate/metamodel/source/annotations/OrmXmlParserTests.java index 97585e5c38..71f219680d 100644 --- a/hibernate-core/src/test/java/org/hibernate/metamodel/source/annotations/OrmXmlParserTests.java +++ b/hibernate-core/src/test/java/org/hibernate/metamodel/source/annotations/OrmXmlParserTests.java @@ -6,6 +6,7 @@ import java.util.Set; import org.junit.Test; +import org.hibernate.metamodel.source.MetadataSources; import org.hibernate.metamodel.source.internal.MetadataImpl; import org.hibernate.service.internal.BasicServiceRegistryImpl; import org.hibernate.testing.junit4.BaseUnitTestCase; @@ -16,7 +17,8 @@ import org.hibernate.testing.junit4.BaseUnitTestCase; public class OrmXmlParserTests extends BaseUnitTestCase { @Test public void testSingleOrmXml() { - OrmXmlParser parser = new OrmXmlParser( new MetadataImpl( new BasicServiceRegistryImpl( Collections.emptyMap() ) ) ); + MetadataImpl metadata = (MetadataImpl) new MetadataSources( new BasicServiceRegistryImpl( Collections.emptyMap() ) ).buildMetadata(); + OrmXmlParser parser = new OrmXmlParser( metadata ); Set xmlFiles = new HashSet(); xmlFiles.add( "org/hibernate/metamodel/source/annotations/orm.xml" ); parser.parseAndUpdateIndex( xmlFiles, null ); @@ -24,7 +26,8 @@ public class OrmXmlParserTests extends BaseUnitTestCase { @Test public void testOrmXmlWithOldSchema() { - OrmXmlParser parser = new OrmXmlParser( new MetadataImpl( new BasicServiceRegistryImpl( Collections.emptyMap() ) ) ); + MetadataImpl metadata = (MetadataImpl) new MetadataSources( new BasicServiceRegistryImpl( Collections.emptyMap() ) ).buildMetadata(); + OrmXmlParser parser = new OrmXmlParser( metadata ); Set xmlFiles = new HashSet(); xmlFiles.add( "org/hibernate/metamodel/source/annotations/orm2.xml" ); parser.parseAndUpdateIndex( xmlFiles, null );