org.hibernate.search.engine.spi
Class AbstractDocumentBuilder<T>

java.lang.Object
  extended by org.hibernate.search.engine.spi.AbstractDocumentBuilder<T>
Direct Known Subclasses:
DocumentBuilderContainedEntity, DocumentBuilderIndexedEntity

public abstract class AbstractDocumentBuilder<T>
extends Object

Abstract base class for the document builders.

Author:
Hardy Ferentschik, Davide D'Alto, Sanne Grinovero

Nested Class Summary
static class AbstractDocumentBuilder.PropertiesMetadata
          Wrapper class containing all the meta data extracted out of a single entity.
 
Field Summary
protected  Class<?> beanClass
           
protected  String beanXClassName
           
protected  Set<String> containedInCollectionRoles
           
protected  EntityState entityState
           
protected  Set<String> fieldCollectionRoles
           
protected  Set<String> indexedEmbeddedCollectionRoles
           
protected  InstanceInitializer instanceInitalizer
           
protected  AbstractDocumentBuilder.PropertiesMetadata metadata
           
protected  org.hibernate.annotations.common.reflection.ReflectionManager reflectionManager
           
 
Constructor Summary
AbstractDocumentBuilder(org.hibernate.annotations.common.reflection.XClass xClass, ConfigContext context, org.apache.lucene.search.Similarity similarity, org.hibernate.annotations.common.reflection.ReflectionManager reflectionManager, Set<org.hibernate.annotations.common.reflection.XClass> optimizationBlackList, InstanceInitializer instanceInitializer)
          Constructor.
 
Method Summary
protected  void addToScopedAnalyzer(String fieldName, org.apache.lucene.analysis.Analyzer analyzer, org.apache.lucene.document.Field.Index index)
           
abstract  void addWorkToQueue(Class<T> entityClass, T entity, Serializable id, boolean delete, boolean add, List<LuceneWork> queue, ConversionContext contextualBridge)
           
 void appendContainedInWorkForInstance(Object instance, WorkPlan workplan, DepthValidator currentDepth)
          If we have a work instance we have to check whether the instance to be indexed is contained in any other indexed entities.
 void close()
          Closes any resource
protected abstract  void documentBuilderSpecificChecks(org.hibernate.annotations.common.reflection.XProperty member, AbstractDocumentBuilder.PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix, ConfigContext context, org.hibernate.search.engine.spi.AbstractDocumentBuilder.PathsContext pathsContext)
           
 void forceStateInspectionOptimizationsDisabled()
          Makes sure isCollectionRoleExcluded will always return false, so that collection update events are always processed.
 ScopedAnalyzer getAnalyzer()
           
 Class<?> getBeanClass()
           
 org.hibernate.annotations.common.reflection.XClass getBeanXClass()
           
 EntityState getEntityState()
           
abstract  Serializable getId(Object entity)
          In case of an indexed entity, return the value of it's identifier: what is marked as @Id or @DocumentId; in case the entity uses @ProvidedId, it's illegal to call this method.
 Set<Class<?>> getMappedSubclasses()
           
 AbstractDocumentBuilder.PropertiesMetadata getMetadata()
           
protected  Integer getPrecisionStep(NumericField numericFieldAnn)
           
 org.apache.lucene.search.Similarity getSimilarity()
           
 boolean isCollectionRoleExcluded(String collectionRole)
          Returns true if the collection event is not going to affect the index state, so that the indexing event can be skipped.
 boolean isDirty(String[] dirtyPropertyNames)
          Hibernate entities might be considered dirty, but still have only changes that don't affect indexing.
 boolean isIdMatchingJpaId()
          To be removed, see org.hibernate.search.engine.DocumentBuilderIndexedEntity.isIdMatchingJpaId()
 boolean isRoot()
           
 void postInitialize(Set<Class<?>> indexedClasses)
           
 boolean requiresProvidedId()
          To be removed, see org.hibernate.search.engine.DocumentBuilderIndexedEntity.isIdMatchingJpaId()
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

beanXClassName

protected final String beanXClassName

beanClass

protected final Class<?> beanClass

instanceInitalizer

protected final InstanceInitializer instanceInitalizer

fieldCollectionRoles

protected final Set<String> fieldCollectionRoles

indexedEmbeddedCollectionRoles

protected final Set<String> indexedEmbeddedCollectionRoles

containedInCollectionRoles

protected final Set<String> containedInCollectionRoles

metadata

protected final AbstractDocumentBuilder.PropertiesMetadata metadata

entityState

protected EntityState entityState

reflectionManager

protected org.hibernate.annotations.common.reflection.ReflectionManager reflectionManager
Constructor Detail

AbstractDocumentBuilder

public AbstractDocumentBuilder(org.hibernate.annotations.common.reflection.XClass xClass,
                               ConfigContext context,
                               org.apache.lucene.search.Similarity similarity,
                               org.hibernate.annotations.common.reflection.ReflectionManager reflectionManager,
                               Set<org.hibernate.annotations.common.reflection.XClass> optimizationBlackList,
                               InstanceInitializer instanceInitializer)
Constructor.

Parameters:
xClass - The class for which to build a document builder
context - Handle to default configuration settings
similarity - The index level similarity
reflectionManager - Reflection manager to use for processing the annotations
optimizationBlackList - keeps track of types on which we need to disable collection events optimizations
Method Detail

addWorkToQueue

public abstract void addWorkToQueue(Class<T> entityClass,
                                    T entity,
                                    Serializable id,
                                    boolean delete,
                                    boolean add,
                                    List<LuceneWork> queue,
                                    ConversionContext contextualBridge)

documentBuilderSpecificChecks

protected abstract void documentBuilderSpecificChecks(org.hibernate.annotations.common.reflection.XProperty member,
                                                      AbstractDocumentBuilder.PropertiesMetadata propertiesMetadata,
                                                      boolean isRoot,
                                                      String prefix,
                                                      ConfigContext context,
                                                      org.hibernate.search.engine.spi.AbstractDocumentBuilder.PathsContext pathsContext)

getId

public abstract Serializable getId(Object entity)
In case of an indexed entity, return the value of it's identifier: what is marked as @Id or @DocumentId; in case the entity uses @ProvidedId, it's illegal to call this method.

Parameters:
entity - the instance for which to retrieve the id
Returns:
the value, or null if it's not an indexed entity
Throws:
IllegalStateException - when used with a @ProvidedId annotated entity

isRoot

public boolean isRoot()

getBeanClass

public Class<?> getBeanClass()

getBeanXClass

public org.hibernate.annotations.common.reflection.XClass getBeanXClass()

getMetadata

public AbstractDocumentBuilder.PropertiesMetadata getMetadata()

getSimilarity

public org.apache.lucene.search.Similarity getSimilarity()

getAnalyzer

public ScopedAnalyzer getAnalyzer()

getEntityState

public EntityState getEntityState()

getMappedSubclasses

public Set<Class<?>> getMappedSubclasses()

postInitialize

public void postInitialize(Set<Class<?>> indexedClasses)

addToScopedAnalyzer

protected void addToScopedAnalyzer(String fieldName,
                                   org.apache.lucene.analysis.Analyzer analyzer,
                                   org.apache.lucene.document.Field.Index index)

appendContainedInWorkForInstance

public void appendContainedInWorkForInstance(Object instance,
                                             WorkPlan workplan,
                                             DepthValidator currentDepth)
If we have a work instance we have to check whether the instance to be indexed is contained in any other indexed entities.

Parameters:
instance - the instance to be indexed
workplan - the current work plan
currentDepth - the current DepthValidator object used to check the graph traversal

getPrecisionStep

protected Integer getPrecisionStep(NumericField numericFieldAnn)

isDirty

public boolean isDirty(String[] dirtyPropertyNames)
Hibernate entities might be considered dirty, but still have only changes that don't affect indexing. So this isDirty() implementation will return true only if the proposed change is possibly affecting the index.

Parameters:
dirtyPropertyNames - Contains the property name of each value which changed, or null for everything.
Returns:
true if it can't make sure the index doesn't need an update
Since:
3.4

requiresProvidedId

public boolean requiresProvidedId()
To be removed, see org.hibernate.search.engine.DocumentBuilderIndexedEntity.isIdMatchingJpaId()

Returns:
true if a providedId needs to be provided for indexing

isIdMatchingJpaId

public boolean isIdMatchingJpaId()
To be removed, see org.hibernate.search.engine.DocumentBuilderIndexedEntity.isIdMatchingJpaId()

Returns:
true if @DocumentId and @Id are found on the same property

isCollectionRoleExcluded

public boolean isCollectionRoleExcluded(String collectionRole)
Returns true if the collection event is not going to affect the index state, so that the indexing event can be skipped.

Parameters:
collectionRole -
Returns:
true if the collection Role does not affect index state
Since:
3.4

forceStateInspectionOptimizationsDisabled

public void forceStateInspectionOptimizationsDisabled()
Makes sure isCollectionRoleExcluded will always return false, so that collection update events are always processed.

See Also:
isCollectionRoleExcluded(String)

close

public void close()
Closes any resource



Copyright © 2006-2012 Red Hat Middleware, LLC. All Rights Reserved