org.hibernate.cfg.annotations.reflection.EJB3ReflectionManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-annotations
Show all versions of hibernate-annotations
Annotations metadata for Hibernate
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 entityListeners = new ArrayList();
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 elements = element.elements( "sequence-generator" );
List sequenceGenerators = (List) defaults.get( SequenceGenerator.class );
if ( sequenceGenerators == null ) {
sequenceGenerators = new ArrayList();
defaults.put( SequenceGenerator.class, sequenceGenerators );
}
for (Element subelement : elements) {
sequenceGenerators.add( EJB3OverridenAnnotationReader.buildSequenceGeneratorAnnotation( subelement ) );
}
elements = element.elements( "table-generator" );
List tableGenerators = (List) defaults.get( TableGenerator.class );
if ( tableGenerators == null ) {
tableGenerators = new ArrayList();
defaults.put( TableGenerator.class, tableGenerators );
}
for (Element subelement : elements) {
tableGenerators.add( EJB3OverridenAnnotationReader.buildTableGeneratorAnnotation( subelement, xmlDefaults ) );
}
List namedQueries = (List) defaults.get( NamedQuery.class );
if ( namedQueries == null ) {
namedQueries = new ArrayList();
defaults.put( NamedQuery.class, namedQueries );
}
List currentNamedQueries = EJB3OverridenAnnotationReader.buildNamedQueries( element, false, xmlDefaults );
namedQueries.addAll( currentNamedQueries );
List namedNativeQueries = (List) defaults.get( NamedNativeQuery.class );
if ( namedNativeQueries == null ) {
namedNativeQueries = new ArrayList();
defaults.put( NamedNativeQuery.class, namedNativeQueries );
}
List currentNamedNativeQueries = EJB3OverridenAnnotationReader.buildNamedQueries( element, true, xmlDefaults );
namedNativeQueries.addAll( currentNamedNativeQueries );
List sqlResultSetMappings = (List) defaults.get( SqlResultSetMapping.class );
if ( sqlResultSetMappings == null ) {
sqlResultSetMappings = new ArrayList();
defaults.put( SqlResultSetMapping.class, sqlResultSetMappings );
}
List currentSqlResultSetMappings = EJB3OverridenAnnotationReader.buildSqlResultsetMappings( element, xmlDefaults );
sqlResultSetMappings.addAll( currentSqlResultSetMappings );
}
}
return defaults;
}
public XMLContext getXMLContext() {
return xmlContext;
}
}