<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jms="http://www.springframework.org/schema/jms"
    xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

            http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <bean id="csvReportGenerator" class="com.armedia.acm.services.search.service.CSVReportGenerator"/>

    <jms:annotation-driven/>

    <bean id="solrRestClient" class="com.armedia.acm.services.search.service.solr.SolrRestClient">
        <property name="solrConfig" ref="solrConfig"/>
        <property name="jmsTemplate" ref="jmsTemplate"/>
    </bean>


    <bean id="searchresultspdfReportGenerator" class="com.armedia.acm.services.search.service.SearchResultsPDFReportGenerator">
        <property name="pdfService" ref="pdfService"/>
        <property name="fileConfigurationService" ref="fileConfigurationServiceImpl"/>
        <property name="configurationClientConfig" ref="configurationClientConfig"/>
    </bean>

    <bean id="solrPostClient" class="com.armedia.acm.services.search.service.solr.DefaultSolrPostClient">
        <property name="solrRestClient" ref="solrRestClient"/>
    </bean>

    <bean id="solrPostQueueListener" class="com.armedia.acm.services.search.service.solr.SolrPostQueueListener">
        <property name="solrPostClient" ref="solrPostClient"/>
    </bean>

    <bean id="sendDocumentsToSolr" class="com.armedia.acm.services.search.service.SendDocumentsToSolr">
        <property name="objectConverter" ref="objectConverter"/>
        <property name="jmsConnectionFactory" ref="jmsConnectionFactory"/>
    </bean>

    <bean id="searchResults" class="com.armedia.acm.services.search.service.SearchResults"/>
    <bean id="jpaObjectsToSearchService" class="com.armedia.acm.services.search.service.JpaObjectsToSearchService">
        <property name="springContextHolder" ref="acmContextHolder"/>
        <property name="sendToSolr" ref="sendDocumentsToSolr"/>
    </bean>

    <bean id="acmJpaBatchUpdateService" class="com.armedia.acm.services.search.service.AcmJpaBatchUpdateService">
        <property name="springContextHolder" ref="acmContextHolder"/>
        <property name="objectsToSearchService" ref="jpaObjectsToSearchService"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="solrConfig" ref="solrConfig"/>
    </bean>

    <bean id="acmJpaBatchUpdateJob" class="com.armedia.acm.services.search.service.AcmJpaBatchUpdateJobDescriptor"
        parent="acmJobDescriptor">
        <property name="jpaBatchUpdateService" ref="acmJpaBatchUpdateService"/>
        <property name="springContextHolder" ref="acmContextHolder"/>
    </bean>

    <bean id="executeSolrQuery" class="com.armedia.acm.services.search.service.ExecuteSolrQuery">
        <property name="objectConverter" ref="objectConverter"/>
        <property name="sendDocumentsToSolr" ref="sendDocumentsToSolr"/>
        <property name="configuration" ref="solrConfig"/>
        <property name="solrClientProvider" ref="solrClientProvider"/>
    </bean>

    <!-- event publishers -->
    <bean id="acmSearchEventPublisher" class="com.armedia.acm.services.search.service.SearchEventPublisher"/>

    <bean id="pluginSearch" class="com.armedia.acm.pluginmanager.model.AcmPlugin">
        <property name="pluginName" value="Search Plugin"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
    </bean>

    <bean id="facetedSearchService" class="com.armedia.acm.services.search.service.FacetedSearchService">
        <property name="auditEventConfig" ref="auditEventConfig"/>
        <property name="searchConfig" ref="searchConfig"/>
        <property name="executeSolrQuery" ref="executeSolrQuery"/>
    </bean>

    <bean id="solrJoinDocumentsService" class="com.armedia.acm.services.search.service.SolrJoinDocumentsServiceImpl">
        <property name="executeSolrQuery" ref="executeSolrQuery"/>
    </bean>

    <bean id="solrConfig" class="com.armedia.acm.services.search.model.solr.SolrConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="searchConfig" class="com.armedia.acm.services.search.model.solr.SearchConfig" scope="refresh">
        <property name="jsonUnmarshaller" ref="jsonUnmarshaller"/>
        <aop:scoped-proxy/>
    </bean>

    <bean id="childDocumentsSearchService" class="com.armedia.acm.services.search.service.ChildDocumentsSearchServiceImpl">
        <property name="executeSolrQuery" ref="executeSolrQuery"/>
    </bean>

    <bean id="solrClientProvider" class="com.armedia.acm.services.search.service.solr.SolrClientProvider">
        <property name="configuration" ref="solrConfig"/>
    </bean>
</beans>