Skip to content

Commit

Permalink
HSEARCH-471 Build IndexingActionInterceptor and expose it in EntityIn…
Browse files Browse the repository at this point in the history
…dexBinding
  • Loading branch information
emmanuelbernard authored and Sanne committed Feb 28, 2012
1 parent 9221d46 commit c356513
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 5 deletions.
Expand Up @@ -26,6 +26,7 @@
import org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity;
import org.hibernate.search.engine.spi.EntityIndexBinder;
import org.hibernate.search.indexes.spi.IndexManager;
import org.hibernate.search.interceptor.IndexingActionInterceptor;
import org.hibernate.search.query.collector.impl.FieldCacheCollectorFactory;
import org.hibernate.search.store.IndexShardingStrategy;

Expand All @@ -38,16 +39,22 @@ public class MutableEntityIndexBinding<T> implements EntityIndexBinder {
private final Similarity similarityInstance;
private DocumentBuilderIndexedEntity<T> documentBuilder;
private final IndexManager[] indexManagers;
private final IndexingActionInterceptor indexingActionInterceptor;

/**
* @param shardingStrategy
* @param similarityInstance
* @param providers
*/
public MutableEntityIndexBinding(IndexShardingStrategy shardingStrategy, Similarity similarityInstance, IndexManager[] providers) {
public MutableEntityIndexBinding(
IndexShardingStrategy shardingStrategy,
Similarity similarityInstance,
IndexManager[] providers,
IndexingActionInterceptor<? super T> indexingActionInterceptor) {
this.shardingStrategy = shardingStrategy;
this.similarityInstance = similarityInstance;
this.indexManagers = providers;
this.indexingActionInterceptor = indexingActionInterceptor;
}

public void setDocumentBuilderIndexedEntity(DocumentBuilderIndexedEntity<T> documentBuilder) {
Expand Down Expand Up @@ -85,4 +92,9 @@ public IndexManager[] getIndexManagers() {
return indexManagers;
}

@Override
public IndexingActionInterceptor getIndexingActionInterceptor() {
return indexingActionInterceptor;
}

}
Expand Up @@ -24,6 +24,7 @@

import org.apache.lucene.search.Similarity;
import org.hibernate.search.indexes.spi.IndexManager;
import org.hibernate.search.interceptor.IndexingActionInterceptor;
import org.hibernate.search.query.collector.impl.FieldCacheCollectorFactory;
import org.hibernate.search.store.IndexShardingStrategy;

Expand Down Expand Up @@ -65,4 +66,5 @@ public interface EntityIndexBinder {
*/
IndexManager[] getIndexManagers();

IndexingActionInterceptor<?> getIndexingActionInterceptor();
}
Expand Up @@ -37,6 +37,7 @@
import org.hibernate.search.cfg.spi.SearchConfiguration;
import org.hibernate.search.engine.impl.MutableEntityIndexBinding;
import org.hibernate.search.indexes.spi.IndexManager;
import org.hibernate.search.interceptor.IndexingActionInterceptor;
import org.hibernate.search.spi.WorkerBuildContext;
import org.hibernate.search.spi.internals.SearchFactoryImplementorWithShareableState;
import org.hibernate.search.store.IndexShardingStrategy;
Expand Down Expand Up @@ -151,9 +152,39 @@ public synchronized MutableEntityIndexBinding buildEntityIndexBinding(
}
}

return new MutableEntityIndexBinding( shardingStrategy, similarityInstance, providers );
Indexed indexedAnnotation = entity.getAnnotation( Indexed.class );
IndexingActionInterceptor<?> interceptor = null;
if (indexedAnnotation != null) {
Class<IndexingActionInterceptor> interceptorClass = indexedAnnotation.actionInterceptor();
if (interceptorClass == IndexingActionInterceptor.class) {
interceptor = null;
}
else {
interceptor = ClassLoaderHelper.instanceFromClass(
IndexingActionInterceptor.class,
interceptorClass,
"IndexingActionInterceptor for " + entity.getName()
);
}
}
return buildTypesafeMutableEntityBinder(
entity.getClass(),
providers,
shardingStrategy,
similarityInstance,
interceptor
);
}


@SuppressWarnings( "unchecked" )
private <T,U> MutableEntityIndexBinding<T> buildTypesafeMutableEntityBinder(Class<T> type, IndexManager[] providers,
IndexShardingStrategy shardingStrategy,
Similarity similarityInstance,
IndexingActionInterceptor<U> interceptor) {
IndexingActionInterceptor<? super T> safeInterceptor = (IndexingActionInterceptor<? super T>) interceptor;
return new MutableEntityIndexBinding<T>( shardingStrategy, similarityInstance, providers, safeInterceptor );
}

/**
* Specifies a custom similarity on an index
* @param newSimilarity
Expand Down
Expand Up @@ -52,6 +52,7 @@
import org.hibernate.search.engine.spi.SearchFactoryImplementor;
import org.hibernate.search.filter.impl.CachingWrapperFilter;
import org.hibernate.search.filter.impl.MRUFilterCachingStrategy;
import org.hibernate.search.interceptor.IndexingActionInterceptor;
import org.hibernate.search.util.configuration.impl.ConfigurationParseHelper;
import org.hibernate.search.cfg.spi.SearchConfiguration;
import org.hibernate.search.util.impl.ClassLoaderHelper;
Expand Down Expand Up @@ -278,8 +279,11 @@ private void fillSimilarityMapping() {
//might have been read from annotations, fill the missing information in the EntityIndexBinder:
entitySimilarity = entityMapping.getDocumentBuilder().getSimilarity();
if ( entitySimilarity != null ) {
MutableEntityIndexBinding newMapping = new MutableEntityIndexBinding( entityMapping.getSelectionStrategy(), entitySimilarity, entityMapping.getIndexManagers() );
newMapping.setDocumentBuilderIndexedEntity( entityMapping.getDocumentBuilder() );
MutableEntityIndexBinding newMapping = buildTypeSafeMutableEntityBinder(
clazz,
entityMapping,
entitySimilarity
);
entityMapping = newMapping;
documentBuildersIndexedEntities.put( clazz, entityMapping );
}
Expand All @@ -301,6 +305,20 @@ else if ( entitySimilarity != null && ! entitySimilarity.getClass().equals( inde
}
}

@SuppressWarnings( "unchecked" )
private <T> MutableEntityIndexBinding<T> buildTypeSafeMutableEntityBinder(Class<T> clazz, EntityIndexBinder entityMapping, Similarity entitySimilarity) {
IndexingActionInterceptor<? super T> indexingActionInterceptor = (IndexingActionInterceptor<? super T>) entityMapping.getIndexingActionInterceptor();
MutableEntityIndexBinding<T> newMapping = new MutableEntityIndexBinding<T>(
entityMapping.getSelectionStrategy(),
entitySimilarity,
entityMapping.getIndexManagers(),
indexingActionInterceptor
);
DocumentBuilderIndexedEntity<T> documentBuilder = (DocumentBuilderIndexedEntity<T>) entityMapping.getDocumentBuilder();
newMapping.setDocumentBuilderIndexedEntity( documentBuilder );
return newMapping;
}

private static FilterCachingStrategy buildFilterCachingStrategy(Properties properties) {
FilterCachingStrategy filterCachingStrategy;
String impl = properties.getProperty( Environment.FILTER_CACHING_STRATEGY );
Expand Down

0 comments on commit c356513

Please sign in to comment.