/* * 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 <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.elasticsearch.analyzer.impl; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.hibernate.search.analyzer.spi.ScopedAnalyzer; /** * A {@code ScopedElasticsearchAnalyzer} is a wrapper class containing all remote analyzers for a given class. * * {@code ScopedElasticsearchAnalyzer} behaves similar to {@code ElasticsearchAnalyzerImpl} but delegates requests for name * to the underlying {@code ElasticsearchAnalyzerImpl} depending on the requested field name. * * @author Guillaume Smet */ public class ScopedElasticsearchAnalyzer implements ElasticsearchAnalyzer, ScopedAnalyzer { private final ElasticsearchAnalyzer globalAnalyzer; private final Map<String, ElasticsearchAnalyzer> scopedAnalyzers; public ScopedElasticsearchAnalyzer(ElasticsearchAnalyzer globalAnalyzer) { this( globalAnalyzer, Collections.<String, ElasticsearchAnalyzer>emptyMap() ); } public ScopedElasticsearchAnalyzer(ElasticsearchAnalyzer globalAnalyzer, Map<String, ElasticsearchAnalyzer> scopedAnalyzers) { this.globalAnalyzer = globalAnalyzer; this.scopedAnalyzers = Collections.unmodifiableMap( new HashMap<>( scopedAnalyzers ) ); } ElasticsearchAnalyzer getGlobalAnalyzer() { return globalAnalyzer; } Map<String, ElasticsearchAnalyzer> getScopedAnalyzers() { return scopedAnalyzers; } private ElasticsearchAnalyzer getDelegate(String fieldName) { ElasticsearchAnalyzer analyzer = scopedAnalyzers.get( fieldName ); if ( analyzer == null ) { analyzer = globalAnalyzer; } return analyzer; } @Override public String getName(String fieldName) { return getDelegate( fieldName ).getName( fieldName ); } @Override public String registerDefinitions(ElasticsearchAnalysisDefinitionRegistry registry, String fieldName) { return getDelegate( fieldName ).registerDefinitions( registry, fieldName ); } @Override public void close() { // nothing to close } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append( getClass().getSimpleName() ); sb.append( "<" ); sb.append( globalAnalyzer ); sb.append( "," ); sb.append( scopedAnalyzers ); sb.append( ">" ); return sb.toString(); } }