All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.cfg.annotations.reflection.EJB3ReflectionManager Maven / Gradle / Ivy

There is a newer version: 3.5.6-Final
Show newest version
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;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy