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

    <bean id="transcribeDao" class="com.armedia.acm.services.transcribe.dao.TranscribeDao"/>
    <bean id="transcribeItemDao" class="com.armedia.acm.services.transcribe.dao.TranscribeItemDao"/>

    <bean id="arkCaseTranscribeService" class="com.armedia.acm.services.transcribe.service.ArkCaseTranscribeServiceImpl">
        <property name="transcribeDao" ref="transcribeDao"/>
        <property name="ecmFileVersionDao" ref="ecmFileVersionDao"/>
        <property name="pipelineManager" ref="mediaEnginePipelineManager"/>
        <property name="mediaEngineEventPublisher" ref="mediaEngineEventPublisher"/>
        <property name="activitiRuntimeService" ref="activitiRuntimeService"/>
        <property name="arkCaseBeanUtils" ref="mediaEngineArkCaseBeanUtils"/>
        <property name="ecmFileService" ref="ecmFileService"/>
        <property name="springContextHolder" ref="acmContextHolder"/>
        <property name="processHandlerMap" ref="mediaEngineDrollsProcessRules"/>
        <property name="objectLockingManager" ref="acmObjectLockingManager"/>
        <property name="userDao" ref="userJpaDao"/>
        <property name="labelManagementService" ref="labelManagementService"/>
        <property name="ecmFileDao" ref="ecmFileDao"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="objectLockService" ref="objectLockService"/>
        <property name="mediaEngineMapper" ref="mediaEngineMapper"/>
        <property name="itemsMapper" ref="itemsMapper"/>
        <property name="mediaEngineServiceFactory" ref="mediaEngineServiceFactory"/>
        <property name="transcribeProviderFactory" ref="transcribeProviderFactory"/>
        <property name="ecmFileTransaction" ref="ecmFileTransaction"/>
        <property name="transcribeConfigurationService" ref="transcribeConfigurationService"/>
        <property name="auditDao" ref="auditDao"/>
        <property name="notificationService" ref="notificationService"/>
        <property name="acmBpmnService" ref="processDefinitionManagementService"/>
        <property name="templateManager" ref="correspondenceTemplateManager"/>
    </bean>

    <bean id="transcribeToSolrTransformer" class="com.armedia.acm.services.transcribe.transformer.TranscribeToSolrTransformer">
        <property name="transcribeDao" ref="transcribeDao"/>
    </bean>

    <bean id="itemsMapper" class="com.armedia.acm.services.transcribe.mapper.ItemsMapper"/>

    <bean id="transcribeItemToSolrTransformer" class="com.armedia.acm.services.transcribe.transformer.TranscribeItemToSolrTransformer">
        <property name="transcribeItemDao" ref="transcribeItemDao"/>
    </bean>

    <bean id="transcribeQueueJobService" class="com.armedia.acm.services.transcribe.job.TranscribeQueueJob">
        <property name="arkCaseTranscribeService" ref="arkCaseTranscribeService"/>
        <property name="activitiRuntimeService" ref="activitiRuntimeService"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="mediaEngineMapper" ref="mediaEngineMapper"/>
        <property name="objectLockingManager" ref="acmObjectLockingManager"/>
        <property name="objectLockService" ref="objectLockService"/>
        <property name="transcribeProviderFactory" ref="transcribeProviderFactory"/>
        <property name="transcribeConfigurationService" ref="transcribeConfigurationService"/>
    </bean>


    <bean id="transcribeConfig" class="com.armedia.acm.services.transcribe.model.TranscribeConfiguration" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="transcribeConfigurationService" class="com.armedia.acm.services.transcribe.service.TranscribeConfigurationService">
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
        <property name="transcribeConfig" ref="transcribeConfig"/>
    </bean>

    <bean id="transcribeQueueJobDescriptor" class="com.armedia.acm.services.transcribe.job.TranscribeQueueJobDescriptor"
          parent="acmJobDescriptor">
        <property name="transcribeQueueJob" ref="transcribeQueueJobService"/>
    </bean>

    <bean id="transcribeBusinessRulesExecutor" class="com.armedia.acm.services.mediaengine.rules.MediaEngineBusinessRulesExecutor"
          parent="simpleStatelessSingleObjectRuleManager">
        <property name="ruleSpreadsheetFilename" value="drools-transcribe-rules.xlsx"/>
    </bean>

    <bean id="transcribeBusinessProcessRulesExecutor"
          class="com.armedia.acm.services.mediaengine.rules.MediaEngineBusinessProcessRulesExecutor"
          parent="simpleStatelessSingleObjectRuleManager">
        <property name="ruleSpreadsheetFilename" value="drools-transcribe-business-process-rules.xlsx"/>
    </bean>

    <bean id="transcribeDroolsRulesRegister" class="com.armedia.acm.services.mediaengine.pipeline.MediaEngineDroolsRulesRegister"
          depends-on="mediaEngineDroolsRules">
        <property name="rules" ref="mediaEngineDroolsRules"/>
        <property name="key" value="TRANSCRIBE"/>
        <property name="value" ref="transcribeBusinessRulesExecutor"/>
    </bean>

    <bean id="transcribeDroolsProcessRulesRegister" class="com.armedia.acm.services.mediaengine.pipeline.MediaEngineDroolsRulesRegister"
          depends-on="mediaEngineDrollsProcessRules">
        <property name="rules" ref="mediaEngineDrollsProcessRules"/>
        <property name="key" value="TRANSCRIBE"/>
        <property name="value" ref="transcribeBusinessProcessRulesExecutor"/>
    </bean>

    <bean id="transcribeProviders" class="java.util.HashMap">
        <constructor-arg>
            <map key-type="java.lang.String" value-type="com.armedia.acm.tool.transcribe.service.TranscribeIntegrationService">
                <entry key="AWS" value-ref="awsTranscribeService"/>
            </map>
        </constructor-arg>
    </bean>

    <bean id="transcribeProviderFactory" class="com.armedia.acm.services.transcribe.factory.TranscribeProviderFactory">
        <property name="providers" ref="transcribeProviders"/>
    </bean>

</beans>