/* * 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.store.spi; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.hibernate.search.cfg.spi.DirectoryProviderService; import org.hibernate.search.engine.service.spi.ServiceManager; import org.hibernate.search.spi.BuildContext; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.store.impl.FSDirectoryProvider; import org.hibernate.search.store.impl.FSMasterDirectoryProvider; import org.hibernate.search.store.impl.FSSlaveDirectoryProvider; import org.hibernate.search.store.impl.RAMDirectoryProvider; import org.hibernate.search.util.impl.ClassLoaderHelper; import org.hibernate.search.util.logging.impl.Log; import org.hibernate.search.util.logging.impl.LoggerFactory; /** * Base class for custom {@link org.hibernate.search.cfg.spi.DirectoryProviderService} implementations * * @author gustavonalle */ public abstract class BaseDirectoryProviderService implements DirectoryProviderService { private static final Log LOG = LoggerFactory.make(); private static final String CONFIG_KEY = "directory_provider"; protected final Map<String, String> defaultProviderClasses = new HashMap<>( 5 ); public BaseDirectoryProviderService() { defaultProviderClasses.put( "filesystem", FSDirectoryProvider.class.getName() ); defaultProviderClasses.put( "filesystem-master", FSMasterDirectoryProvider.class.getName() ); defaultProviderClasses.put( "filesystem-slave", FSSlaveDirectoryProvider.class.getName() ); defaultProviderClasses.put( "ram", RAMDirectoryProvider.class.getName() ); defaultProviderClasses.put( "infinispan", "org.infinispan.hibernate.search.spi.InfinispanDirectoryProvider" ); } @Override public DirectoryProvider create(Properties indexProps, String indexName, BuildContext context) { String className = indexProps.getProperty( CONFIG_KEY, "" ).trim(); if ( className.isEmpty() ) { return initialize( getDefault().getName(), indexName, indexProps, context ); } String fullClassName = toFullyQualifiedClassName( className ); return initialize( fullClassName, indexName, indexProps, context ); } protected DirectoryProvider<?> initialize(String fullClassName, String indexName, Properties indexProps, BuildContext context) { ServiceManager serviceManager = context.getServiceManager(); DirectoryProvider provider = ClassLoaderHelper.instanceFromName( DirectoryProvider.class, fullClassName, "directory provider", serviceManager ); try { provider.initialize( indexName, indexProps, context ); } catch (Exception e) { throw LOG.cannotInitializeDirectoryProvider( provider.getClass(), indexName, e ); } return provider; } }