Package org.hibernate.annotations.common.reflection

Examples of org.hibernate.annotations.common.reflection.ReflectionManager


      }
    }
  }

  private ReflectionManager getReflectionManager(SearchConfiguration cfg) {
    ReflectionManager reflectionManager = cfg.getReflectionManager();
    return getReflectionManager( reflectionManager );
  }
View Full Code Here


   * Extracts the index name used for the entity.
   *
   * @return the index name
   */
  private static String getIndexName(XClass clazz, SearchConfiguration cfg) {
    ReflectionManager reflectionManager = cfg.getReflectionManager();
    if ( reflectionManager == null ) {
      reflectionManager = new JavaReflectionManager();
    }
    //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
    Class<?> aClass = cfg.getClassMapping( clazz.getName() );
    XClass rootIndex = null;
    do {
      XClass currentClazz = reflectionManager.toXClass( aClass );
      Indexed indexAnn = currentClazz.getAnnotation( Indexed.class );
      if ( indexAnn != null ) {
        if ( indexAnn.index().length() != 0 ) {
          return indexAnn.index();
        }
View Full Code Here

    }

    public AuditConfiguration(Configuration cfg) {
        Properties properties = cfg.getProperties();

        ReflectionManager reflectionManager = cfg.getReflectionManager();
        globalCfg = new GlobalConfiguration(properties);
        RevisionInfoConfiguration revInfoCfg = new RevisionInfoConfiguration(globalCfg);
        RevisionInfoConfigurationResult revInfoCfgResult = revInfoCfg.configure(cfg, reflectionManager);
        auditEntCfg = new AuditEntitiesConfiguration(properties, revInfoCfgResult.getRevisionInfoEntityName());
        auditProcessManager = new AuditProcessManager(revInfoCfgResult.getRevisionInfoGenerator());
View Full Code Here

  private ReflectionManager createReflectionManager() {
    return createReflectionManager( new JPAMetadataProvider() );
  }

  private ReflectionManager createReflectionManager(MetadataProvider metadataProvider) {
    ReflectionManager reflectionManager = new JavaReflectionManager();
    ( (MetadataProviderInjector) reflectionManager ).setMetadataProvider( metadataProvider );
    return reflectionManager;
  }
View Full Code Here

   * @return A map of {@code InheritanceState}s keyed against their {@code XClass}.
   */
  public static Map<XClass, InheritanceState> buildInheritanceStates(
      List<XClass> orderedClasses,
      Mappings mappings) {
    ReflectionManager reflectionManager = mappings.getReflectionManager();
    Map<XClass, InheritanceState> inheritanceStatePerClass = new HashMap<XClass, InheritanceState>(
        orderedClasses.size()
    );
    for ( XClass clazz : orderedClasses ) {
      InheritanceState superclassState = InheritanceState.getSuperclassInheritanceState(
View Full Code Here

          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 =
View Full Code Here

              .getName()
      );
    }
    XAnnotatedElement annotatedClass = clazzToProcess;
    log.info( "Binding entity from annotated class: {}", clazzToProcess.getName() );
    final ReflectionManager reflectionManager = mappings.getReflectionManager();
    InheritanceState superEntityState =
        InheritanceState.getSuperEntityInheritanceState(
            clazzToProcess, inheritanceStatePerClass, reflectionManager
        );
    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 );
    BinderHelper.bindAnyMetaDefs( 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.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 );
   
    //Filters are not allowed on subclasses
    if ( !inheritanceState.hasParents ) {
      bindFilters(clazzToProcess, entityBinder, mappings);
    }
   
    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, inheritanceStatePerClass
    );

    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 );
      }
      //we are never in a second pass at that stage, so queue it
      SecondPass sp = new JoinedSubclassFkSecondPass( jsc, inheritanceJoinedColumns, key, mappings );
      mappings.addSecondPass( sp );
      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(
            persistentClass, 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;
    XClass current = null;
    if ( !inheritanceState.hasParents ) {
      //look for idClass
      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, reflectionManager
        );
      }
      while ( state != null );
    }
    if ( idClass != null ) {
      XClass compositeClass = reflectionManager.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;
View Full Code Here

   
    //ordered to allow proper messages on properties subclassing
    List<XClass> classesToProcess = new ArrayList<XClass>();
    XClass currentClassInHierarchy = annotatedClass;
    InheritanceState superclassState;
    final ReflectionManager reflectionManager = mappings.getReflectionManager();
    do {
      classesToProcess.add( 0, currentClassInHierarchy );
      XClass superClass = currentClassInHierarchy;
      do {
        superClass = superClass.getSuperclass();
        superclassState = inheritanceStatePerClass.get( superClass );
      }
      while ( superClass != null && !reflectionManager
          .equals( superClass, Object.class ) && superclassState == null );

      currentClassInHierarchy = superClass;
    }
    while ( superclassState != null && superclassState.isEmbeddableSuperclass );
View Full Code Here

      return shardLocalProperties;
    }
  }

  private static String getDirectoryProviderName(XClass clazz, SearchConfiguration cfg) {
    ReflectionManager reflectionManager = cfg.getReflectionManager();
    if ( reflectionManager == null ) {
      reflectionManager = new JavaReflectionManager();
    }
    //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
    Class<?> aClass = cfg.getClassMapping( clazz.getName() );
    XClass rootIndex = null;
    do {
      XClass currentClazz = reflectionManager.toXClass( aClass );
      Indexed indexAnn = currentClazz.getAnnotation( Indexed.class );
      if ( indexAnn != null ) {
        if ( indexAnn.index().length() != 0 ) {
          return indexAnn.index();
        }
View Full Code Here

    final Properties configurationProperties = factoryState.getConfigurationProperties();
    BuildContext buildContext = new BuildContext();

    //TODO we don't keep the reflectionManager. Is that an issue?
    IncrementalSearchConfiguration cfg = new IncrementalSearchConfiguration( classes, configurationProperties, factoryState );
    final ReflectionManager reflectionManager = getReflectionManager( cfg );

    //TODO programmatic mapping support
    //FIXME The current initDocumentBuilders
    initDocumentBuilders( cfg, reflectionManager, buildContext );
    final Map<Class<?>, EntityIndexBinder> documentBuildersIndexedEntities = factoryState.getIndexBindingForEntity();
View Full Code Here

TOP

Related Classes of org.hibernate.annotations.common.reflection.ReflectionManager

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.