/* * 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.analyzer.definition.impl; import java.util.ArrayList; import java.util.List; import org.apache.lucene.analysis.util.CharFilterFactory; import org.apache.lucene.analysis.util.TokenFilterFactory; import org.apache.lucene.analysis.util.TokenizerFactory; import org.hibernate.annotations.common.annotationfactory.AnnotationDescriptor; import org.hibernate.annotations.common.annotationfactory.AnnotationFactory; import org.hibernate.search.analyzer.definition.LuceneAnalyzerDefinitionContext; import org.hibernate.search.analyzer.definition.LuceneAnalyzerDefinitionWithTokenizerContext; import org.hibernate.search.analyzer.definition.LuceneCharFilterDefinitionContext; import org.hibernate.search.analyzer.definition.LuceneTokenFilterDefinitionContext; import org.hibernate.search.annotations.AnalyzerDef; import org.hibernate.search.annotations.CharFilterDef; import org.hibernate.search.annotations.TokenFilterDef; /** * @author Yoann Rodiere */ public class LuceneAnalyzerDefinitionContextImpl implements LuceneAnalyzerDefinitionContext, LuceneAnalyzerDefinitionWithTokenizerContext { private final LuceneAnalyzerDefinitionRegistryBuilderImpl registry; private final String name; private final LuceneTokenizerDefinitionContextImpl tokenizer = new LuceneTokenizerDefinitionContextImpl(); private final List<LuceneCharFilterDefinitionContextImpl> charFilters = new ArrayList<>(); private final List<LuceneTokenFilterDefinitionContextImpl> tokenFilters = new ArrayList<>(); public LuceneAnalyzerDefinitionContextImpl(LuceneAnalyzerDefinitionRegistryBuilderImpl registry, String name) { this.registry = registry; this.name = name; } @Override public LuceneAnalyzerDefinitionContext analyzer(String name) { return registry.analyzer( name ); } @Override public LuceneAnalyzerDefinitionWithTokenizerContext tokenizer(Class<? extends TokenizerFactory> factory) { tokenizer.factory( factory ); return this; } @Override public LuceneAnalyzerDefinitionWithTokenizerContext param(String name, String value) { tokenizer.param( name, value ); return this; } @Override public LuceneCharFilterDefinitionContext charFilter(Class<? extends CharFilterFactory> factory) { LuceneCharFilterDefinitionContextImpl filter = new LuceneCharFilterDefinitionContextImpl( this, factory ); charFilters.add( filter ); return filter; } @Override public LuceneTokenFilterDefinitionContext tokenFilter(Class<? extends TokenFilterFactory> factory) { LuceneTokenFilterDefinitionContextImpl filter = new LuceneTokenFilterDefinitionContextImpl( this, factory ); tokenFilters.add( filter ); return filter; } public AnalyzerDef build() { AnnotationDescriptor descriptor = new AnnotationDescriptor( AnalyzerDef.class ); descriptor.setValue( "name", name ); descriptor.setValue( "tokenizer", tokenizer.build() ); descriptor.setValue( "charFilters", LuceneAnalyzerDefinitionUtils.buildAll( charFilters, CharFilterDef[]::new ) ); descriptor.setValue( "filters", LuceneAnalyzerDefinitionUtils.buildAll( tokenFilters, TokenFilterDef[]::new ) ); return AnnotationFactory.create( descriptor ); } }