/*
* 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.testsupport.setup;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import org.hibernate.annotations.common.reflection.ReflectionManager;
import org.hibernate.search.cfg.SearchMapping;
import org.hibernate.search.cfg.spi.SearchConfiguration;
import org.hibernate.search.cfg.spi.SearchConfigurationBase;
import org.hibernate.search.engine.service.classloading.impl.DefaultClassLoaderService;
import org.hibernate.search.engine.service.classloading.spi.ClassLoaderService;
import org.hibernate.search.engine.service.spi.Service;
import org.hibernate.search.spi.DefaultInstanceInitializer;
import org.hibernate.search.spi.InstanceInitializer;
import org.hibernate.search.testsupport.TestConstants;
/**
* Manually defines the configuration.
*
* @author Emmanuel Bernard
*/
public class SearchConfigurationForTest extends SearchConfigurationBase implements SearchConfiguration {
private final Map<String, Class<?>> classes;
private final Properties properties;
private final HashMap<Class<? extends Service>, Object> providedServices;
private final InstanceInitializer initializer;
private SearchMapping programmaticMapping;
private boolean transactionsExpected = true;
private boolean indexMetadataComplete = true;
private boolean deleteByTermEnforced = false;
private boolean idProvidedImplicit = false;
private boolean multitenancyEnabled = false;
private ClassLoaderService classLoaderService;
private boolean enableJPAAnnotationsProcessing;
public SearchConfigurationForTest() {
this( DefaultInstanceInitializer.DEFAULT_INITIALIZER, false );
}
public SearchConfigurationForTest(InstanceInitializer init, boolean expectsJPAAnnotations) {
this.initializer = init;
this.enableJPAAnnotationsProcessing = expectsJPAAnnotations;
this.classes = new HashMap<String, Class<?>>();
this.properties = TestDefaults.getProperties();
this.providedServices = new HashMap<Class<? extends Service>, Object>();
this.classLoaderService = new DefaultClassLoaderService();
addProperty( "hibernate.search.default.directory_provider", "ram" );
addProperty( "hibernate.search.lucene_version", TestConstants.getTargetLuceneVersion().toString() );
}
public SearchConfigurationForTest addProperty(String key, String value) {
properties.setProperty( key, value );
return this;
}
public SearchConfigurationForTest addClass(Class<?> indexed) {
classes.put( indexed.getName(), indexed );
return this;
}
@Override
public Iterator<Class<?>> getClassMappings() {
return classes.values().iterator();
}
@Override
public Class<?> getClassMapping(String name) {
return classes.get( name );
}
@Override
public String getProperty(String propertyName) {
return properties.getProperty( propertyName );
}
@Override
public Properties getProperties() {
return properties;
}
@Override
public ReflectionManager getReflectionManager() {
return null;
}
@Override
public SearchMapping getProgrammaticMapping() {
return programmaticMapping;
}
public SearchConfigurationForTest setProgrammaticMapping(SearchMapping programmaticMapping) {
this.programmaticMapping = programmaticMapping;
return this;
}
@Override
public Map<Class<? extends Service>, Object> getProvidedServices() {
return providedServices;
}
public void addProvidedService(Class<? extends Service> serviceRole, Object service) {
providedServices.put( serviceRole, service );
}
@Override
public boolean isTransactionManagerExpected() {
return this.transactionsExpected;
}
public void setTransactionsExpected(boolean transactionsExpected) {
this.transactionsExpected = transactionsExpected;
}
@Override
public InstanceInitializer getInstanceInitializer() {
return initializer;
}
@Override
public boolean isIndexMetadataComplete() {
return indexMetadataComplete;
}
public void setIndexMetadataComplete(boolean indexMetadataComplete) {
this.indexMetadataComplete = indexMetadataComplete;
}
public void setDeleteByTermEnforced(boolean deleteByTermEnforced) {
this.deleteByTermEnforced = deleteByTermEnforced;
}
@Override
public boolean isDeleteByTermEnforced() {
return deleteByTermEnforced;
}
@Override
public boolean isIdProvidedImplicit() {
return idProvidedImplicit;
}
public SearchConfigurationForTest setIdProvidedImplicit(boolean idProvidedImplicit) {
this.idProvidedImplicit = idProvidedImplicit;
return this;
}
@Override
public boolean isMultitenancyEnabled() {
return multitenancyEnabled;
}
public SearchConfigurationForTest setMultitenancyEnabled(boolean multitenancyEnabled) {
this.multitenancyEnabled = multitenancyEnabled;
return this;
}
@Override
public ClassLoaderService getClassLoaderService() {
return classLoaderService;
}
public void setClassLoaderService(ClassLoaderService classLoaderService) {
this.classLoaderService = classLoaderService;
}
@Override
public boolean isJPAAnnotationsProcessingEnabled() {
return enableJPAAnnotationsProcessing;
}
public void setEnableJPAAnnotationsProcessing(boolean enableJPAAnnotationsProcessing) {
this.enableJPAAnnotationsProcessing = enableJPAAnnotationsProcessing;
}
}