
org.hibernate.search.analyzer.impl.ScopedRemoteAnalyzer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-search-engine Show documentation
Show all versions of hibernate-search-engine Show documentation
Core of the Object/Lucene mapper, query engine and index management
/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.search.analyzer.impl;
import java.util.HashMap;
import java.util.Map;
import org.hibernate.search.util.logging.impl.Log;
import org.hibernate.search.util.logging.impl.LoggerFactory;
/**
* A {@code ScopedRemoteAnalyzer} is a wrapper class containing all remote analyzers for a given class.
*
* {@code ScopedRemoteAnalyzer} behaves similar to {@code RemoteAnalyzer} but delegates requests for name
* to the underlying {@code RemoteAnalyzer} depending on the requested field name.
*
* @author Guillaume Smet
*/
public class ScopedRemoteAnalyzer extends RemoteAnalyzer implements ScopedAnalyzer {
private static final Log log = LoggerFactory.make();
private RemoteAnalyzer globalAnalyzer;
private final Map scopedAnalyzers;
public ScopedRemoteAnalyzer(AnalyzerReference globalAnalyzerReference) {
this( getRemoteAnalyzer( globalAnalyzerReference ), new HashMap() );
}
private ScopedRemoteAnalyzer(RemoteAnalyzer globalAnalyzer, Map analyzers) {
super( globalAnalyzer.name );
this.globalAnalyzer = globalAnalyzer;
this.scopedAnalyzers = analyzers;
}
@Override
public void setGlobalAnalyzerReference(AnalyzerReference globalAnalyzerReference) {
RemoteAnalyzer remoteAnalyzer = getRemoteAnalyzer( globalAnalyzerReference );
this.name = remoteAnalyzer.name;
this.globalAnalyzer = remoteAnalyzer;
}
@Override
public void addScopedAnalyzerReference(String scope, AnalyzerReference analyzerReference) {
this.scopedAnalyzers.put( scope, getRemoteAnalyzer( analyzerReference ) );
}
@Override
public void addScopedPassThroughAnalyzerReference(String scope) {
this.scopedAnalyzers.put( scope, RemoteAnalyzerReference.PASS_THROUGH.getAnalyzer() );
}
@Override
public String getName(String fieldName) {
final RemoteAnalyzer analyzer = scopedAnalyzers.get( fieldName );
if ( analyzer == null ) {
return globalAnalyzer.getName( fieldName );
}
else {
return analyzer.getName( fieldName );
}
}
@Override
public ScopedAnalyzer clone() {
return new ScopedRemoteAnalyzer( globalAnalyzer, scopedAnalyzers );
}
private static RemoteAnalyzer getRemoteAnalyzer(AnalyzerReference analyzerReference) {
if ( !( analyzerReference instanceof RemoteAnalyzerReference ) ) {
throw log.analyzerReferenceIsNotRemote( analyzerReference );
}
return ( (RemoteAnalyzerReference) analyzerReference ).getAnalyzer();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy