package org.infinispan.lucene.cacheloader.configuration; import static org.infinispan.lucene.cacheloader.configuration.LuceneLoaderConfiguration.AFFINITY_SEGMENT_ID; import static org.infinispan.lucene.cacheloader.configuration.LuceneLoaderConfiguration.AUTO_CHUNK_SIZE; import static org.infinispan.lucene.cacheloader.configuration.LuceneLoaderConfiguration.LOCATION; import org.infinispan.commons.configuration.Builder; import org.infinispan.configuration.cache.AbstractStoreConfigurationBuilder; import org.infinispan.configuration.cache.PersistenceConfigurationBuilder; /** * {@link org.infinispan.configuration.cache.ConfigurationBuilder} bean for the {@link LuceneLoaderConfiguration} * * @author navssurtani * @since 6.0.0 */ public class LuceneLoaderConfigurationBuilder extends AbstractStoreConfigurationBuilder<LuceneLoaderConfiguration, LuceneLoaderConfigurationBuilder> { public LuceneLoaderConfigurationBuilder(PersistenceConfigurationBuilder builder) { super(builder, LuceneLoaderConfiguration.attributeDefinitionSet()); } /** * When the index is stored on a per-segment affinity base, set the affinity id for this index instance. * Ignore this when not using the Index Affinity feature. * * @param affinitySegmentId * @return this for method chaining */ public LuceneLoaderConfigurationBuilder affinitySegmentId(int affinitySegmentId) { attributes.attribute(AFFINITY_SEGMENT_ID).set(affinitySegmentId); return this; } /** * When segment files are larger than this amount of bytes, the segment will be split into multiple chunks * of this size. * * @param autoChunkSize * @return this for method chaining */ public LuceneLoaderConfigurationBuilder autoChunkSize(int autoChunkSize) { attributes.attribute(AUTO_CHUNK_SIZE).set(autoChunkSize); return this; } /** * Path to the root directory containing all indexes. Indexes are loaded from the immediate subdirectories * of specified path, and each such subdirectory name will be the index name that must match the name * parameter of a Directory constructor. * * @param location path to the root directory of all indexes * @return this for method chaining */ public LuceneLoaderConfigurationBuilder location(String location) { attributes.attribute(LOCATION).set(location); return this; } @Override public void validate() { // No op. } @Override public LuceneLoaderConfiguration create() { return new LuceneLoaderConfiguration(attributes.protect(), async.create(), singletonStore.create()); } @Override public Builder<?> read(LuceneLoaderConfiguration template) { super.read(template); return this; } @Override public LuceneLoaderConfigurationBuilder self() { return this; } @Override public String toString() { return "LuceneLoaderConfigurationBuilder [attributes=" + attributes + ", async=" + async + ", singletonStore=" + singletonStore + "]"; } }