Examples of ConfigContext


Examples of org.hibernate.search.impl.ConfigContext

  /*
   * Initialize the document builder
   * This algorithm seems to be safe for incremental search factories.
   */
  private void initDocumentBuilders(SearchConfiguration searchConfiguration, BuildContext buildContext, SearchMapping searchMapping) {
    ConfigContext configContext = new ConfigContext( searchConfiguration, buildContext, searchMapping );

    initProgrammaticAnalyzers( configContext, searchConfiguration.getReflectionManager() );
    initProgrammaticallyDefinedFilterDef( searchConfiguration.getReflectionManager() );
    final PolymorphicIndexHierarchy indexingHierarchy = factoryState.getIndexHierarchy();
    final Map<Class<?>, EntityIndexBinding> documentBuildersIndexedEntities = factoryState.getIndexBindings();
    final Map<Class<?>, DocumentBuilderContainedEntity> documentBuildersContainedEntities = factoryState.getDocumentBuildersContainedEntities();
    final Set<XClass> optimizationBlackListedTypes = new HashSet<XClass>();
    final Map<XClass, Class<?>> classMappings = initializeClassMappings(
        searchConfiguration,
        searchConfiguration.getReflectionManager()
    );

    //we process the @Indexed classes last, so we first start all IndexManager(s).
    final List<XClass> rootIndexedEntities = new LinkedList<XClass>();
    final org.hibernate.search.engine.metadata.impl.MetadataProvider metadataProvider =
        new AnnotationMetadataProvider( searchConfiguration.getReflectionManager(), configContext );

    for ( Map.Entry<XClass, Class<?>> mapping : classMappings.entrySet() ) {
      XClass mappedXClass = mapping.getKey();
      Class<?> mappedClass = mapping.getValue();

      if ( mappedXClass.isAnnotationPresent( Indexed.class ) ) {
        if ( mappedXClass.isAbstract() ) {
          log.abstractClassesCannotInsertDocuments( mappedXClass.getName() );
          continue;
        }

        rootIndexedEntities.add( mappedXClass );
        indexingHierarchy.addIndexedClass( mappedClass );
      }
      else if ( metadataProvider.containsSearchMetadata( mappedClass ) ) {
        //FIXME DocumentBuilderIndexedEntity needs to be built by a helper method receiving Class<T> to infer T properly
        //XClass unfortunately is not (yet) genericized: TODO?

        TypeMetadata typeMetadata = metadataProvider.getTypeMetadataFor( mappedClass );
        final DocumentBuilderContainedEntity documentBuilder = new DocumentBuilderContainedEntity(
            mappedXClass,
            typeMetadata,
            searchConfiguration.getReflectionManager(),
            optimizationBlackListedTypes,
            searchConfiguration.getInstanceInitializer()
        );
        //TODO enhance that, I don't like to expose EntityState
        if ( documentBuilder.getEntityState() != EntityState.NON_INDEXABLE ) {
          documentBuildersContainedEntities.put( mappedClass, documentBuilder );
        }
      }
      bindFilterDefs( mappedXClass );
      //TODO should analyzer def for classes at their same level???
    }

    IndexManagerHolder indexesFactory = factoryState.getAllIndexesManager();

    // Create all IndexManagers, configure and start them:
    for ( XClass mappedXClass : rootIndexedEntities ) {
      Class mappedClass = classMappings.get( mappedXClass );
      MutableEntityIndexBinding entityIndexBinding = indexesFactory.buildEntityIndexBinding(
          mappedXClass,
          mappedClass,
          searchConfiguration,
          buildContext
      );

      // interceptor might use non indexed state
      if ( entityIndexBinding.getEntityIndexingInterceptor() != null ) {
        optimizationBlackListedTypes.add( mappedXClass );
      }

      // Create all DocumentBuilderIndexedEntity
      // FIXME DocumentBuilderIndexedEntity needs to be built by a helper method receiving Class<T> to infer T properly
      // XClass unfortunately is not (yet) genericized: TODO ?
      TypeMetadata typeMetadata = metadataProvider.getTypeMetadataFor( mappedClass );
      final DocumentBuilderIndexedEntity documentBuilder =
          new DocumentBuilderIndexedEntity(
              mappedXClass,
              typeMetadata,
              configContext,
              searchConfiguration.getReflectionManager(),
              optimizationBlackListedTypes,
              searchConfiguration.getInstanceInitializer()
          );
      entityIndexBinding.setDocumentBuilderIndexedEntity( documentBuilder );

      documentBuildersIndexedEntities.put( mappedClass, entityIndexBinding );
    }

    disableBlackListedTypesOptimization(
        classMappings,
        optimizationBlackListedTypes,
        documentBuildersIndexedEntities,
        documentBuildersContainedEntities
    );
    factoryState.setAnalyzers( configContext.initLazyAnalyzers() );
  }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. 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.