/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2010, Red Hat, Inc. and/or its affiliates or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat, Inc.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.hibernate.search.backend.configuration.impl;
import java.io.Serializable;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.LogByteSizeMergePolicy;
import org.hibernate.search.SearchException;
import org.hibernate.search.util.configuration.impl.ConfigurationParseHelper;
/**
* Represents possible options to be applied to an
* {@code org.apache.lucene.index.IndexWriter}.
*
* @author Sanne Grinovero
*/
public enum IndexWriterSetting implements Serializable {
/**
* @see org.apache.lucene.index.IndexWriterConfig#setMaxBufferedDeleteTerms(int)
*/
MAX_BUFFERED_DELETE_TERMS( "max_buffered_delete_terms" ) {
public void applySetting(IndexWriterConfig writerConfig, int value) {
writerConfig.setMaxBufferedDeleteTerms( value );
}
},
/**
* @see org.apache.lucene.index.IndexWriterConfig#setMaxBufferedDocs(int)
*/
MAX_BUFFERED_DOCS( "max_buffered_docs" ) {
public void applySetting(IndexWriterConfig writerConfig, int value) {
writerConfig.setMaxBufferedDocs( value );
}
},
/**
* @see org.apache.lucene.index.LogByteSizeMergePolicy#setMaxMergeDocs(int)
*/
MAX_MERGE_DOCS( "max_merge_docs" ) {
public void applySetting(LogByteSizeMergePolicy logByteSizeMergePolicy, int value) {
logByteSizeMergePolicy.setMaxMergeDocs( value );
}
},
/**
* @see org.apache.lucene.index.LogByteSizeMergePolicy#setMergeFactor(int)
*/
MERGE_FACTOR( "merge_factor" ) {
public void applySetting(LogByteSizeMergePolicy logByteSizeMergePolicy, int value) {
logByteSizeMergePolicy.setMergeFactor( value );
}
},
/**
* @see org.apache.lucene.index.LogByteSizeMergePolicy#setMinMergeMB(double)
*/
MERGE_MIN_SIZE( "merge_min_size" ) {
public void applySetting(LogByteSizeMergePolicy logByteSizeMergePolicy, int value) {
logByteSizeMergePolicy.setMinMergeMB( value );
}
},
/**
* @see org.apache.lucene.index.LogByteSizeMergePolicy#setMaxMergeMB(double)
*/
MERGE_MAX_SIZE( "merge_max_size" ) {
public void applySetting(LogByteSizeMergePolicy logByteSizeMergePolicy, int value) {
logByteSizeMergePolicy.setMaxMergeMB( value );
}
},
/**
* @see org.apache.lucene.index.LogByteSizeMergePolicy#setMaxMergeMBForForcedMerge(double)
*/
MERGE_MAX_OPTIMIZE_SIZE( "merge_max_optimize_size" ) {
public void applySetting(LogByteSizeMergePolicy logByteSizeMergePolicy, int value) {
logByteSizeMergePolicy.setMaxMergeMBForForcedMerge( value );
}
},
/**
* @see org.apache.lucene.index.LogByteSizeMergePolicy#setCalibrateSizeByDeletes(boolean)
*/
MERGE_CALIBRATE_BY_DELETES( "merge_calibrate_by_deletes" ) {
public void applySetting(LogByteSizeMergePolicy logByteSizeMergePolicy, int value) {
boolean calibrateByDeletes = intToBoolean( value );
logByteSizeMergePolicy.setCalibrateSizeByDeletes( calibrateByDeletes );
}
},
/**
* @see org.apache.lucene.index.IndexWriterConfig#setRAMBufferSizeMB(double)
*/
RAM_BUFFER_SIZE( "ram_buffer_size" ) {
public void applySetting(IndexWriterConfig writerConfig, int value) {
writerConfig.setRAMBufferSizeMB( value );
}
},
/**
* @see org.apache.lucene.index.IndexWriterConfig#setTermIndexInterval(int)
*/
TERM_INDEX_INTERVAL( "term_index_interval" ) {
public void applySetting(IndexWriterConfig writerConfig, int value) {
writerConfig.setTermIndexInterval( value );
}
},
/**
* @see org.apache.lucene.index.LogByteSizeMergePolicy#setUseCompoundFile(boolean)
*/
USE_COMPOUND_FILE( "use_compound_file" ) {
@Override
public Integer parseVal(String value) {
return USE_COMPOUND_FILE.parseBoolean( value );
}
@Override
public void applySetting(LogByteSizeMergePolicy logByteSizeMergePolicy, int value) {
boolean useCompoundFile = intToBoolean( value );
logByteSizeMergePolicy.setUseCompoundFile( useCompoundFile );
}
};
private static final Integer TRUE = 1;
private static final Integer FALSE = 0;
private final String cfgKey;
IndexWriterSetting(String configurationKey) {
this.cfgKey = configurationKey;
}
/**
* @throws IllegalArgumentException when user selects an invalid value; should be wrapped.
*/
public void applySetting(IndexWriterConfig writerConfig, int value) {
// nothing to do unless overriden
}
/**
* @throws IllegalArgumentException when user selects an invalid value; should be wrapped.
*/
public void applySetting(LogByteSizeMergePolicy logByteSizeMergePolicy, int value) {
// nothing to do unless overriden
}
/**
* @return The key used in configuration files to select an option.
*/
public String getKey() {
return cfgKey;
}
/**
* Specific parameters may override to provide additional keywords support.
*
* @param value the string value as in configuration file
* @return the integer value going to be set as parameter
* @throws SearchException for unrecognized values
*/
public Integer parseVal(String value) {
return ConfigurationParseHelper.parseInt(
value,
"Invalid value for " + cfgKey + ": " + value
);
}
private Integer parseBoolean(String value) {
boolean v = ConfigurationParseHelper.parseBoolean(
value,
"Invalid value for " + cfgKey + ": " + value
);
return v ? TRUE : FALSE;
}
private static boolean intToBoolean(int value) {
return value == TRUE;
}
}