package fr.openwide.core.jpa.more.config.spring; import org.apache.lucene.search.SortField; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Scope; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.support.TransactionTemplate; import fr.openwide.core.jpa.config.spring.AbstractJpaConfig; import fr.openwide.core.jpa.config.spring.provider.JpaPackageScanProvider; import fr.openwide.core.jpa.more.business.CoreJpaMoreBusinessPackage; import fr.openwide.core.jpa.more.business.generic.model.GenericListItem; import fr.openwide.core.jpa.more.business.generic.query.ISimpleGenericListItemSearchQuery; import fr.openwide.core.jpa.more.business.generic.query.SimpleGenericListItemHibernateSearchSearchQueryImpl; import fr.openwide.core.jpa.more.business.search.query.HibernateSearchLuceneQueryFactoryImpl; import fr.openwide.core.jpa.more.business.search.query.IHibernateSearchLuceneQueryFactory; import fr.openwide.core.jpa.more.business.sort.ISort; import fr.openwide.core.jpa.more.business.task.search.IQueuedTaskHolderSearchQuery; import fr.openwide.core.jpa.more.business.task.search.QueuedTaskHolderSearchQueryImpl; import fr.openwide.core.jpa.more.util.CoreJpaMoreUtilPackage; @Import(JpaMoreApplicationPropertyRegistryConfig.class) @ComponentScan(basePackageClasses = { CoreJpaMoreBusinessPackage.class, CoreJpaMoreUtilPackage.class }) public abstract class AbstractJpaMoreJpaConfig extends AbstractJpaConfig { @Bean public TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager) { return new TransactionTemplate(transactionManager); } @Bean public JpaPackageScanProvider jpaMorePackageScanProvider() { return new JpaPackageScanProvider(CoreJpaMoreBusinessPackage.class.getPackage()); } @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public <T extends GenericListItem<? super T>, S extends ISort<SortField>> ISimpleGenericListItemSearchQuery<T, S> simpleGenericListItemSearchQuery(Class<T> clazz) { return new SimpleGenericListItemHibernateSearchSearchQueryImpl<T, S>(clazz); } @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public IHibernateSearchLuceneQueryFactory hibernateSearchLuceneQueryFactory() { return new HibernateSearchLuceneQueryFactoryImpl(); } @Bean @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public IQueuedTaskHolderSearchQuery queuedTaskHolderSearchQuery() { return new QueuedTaskHolderSearchQueryImpl(); } }