<?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="ocrDao" class="com.armedia.acm.services.ocr.dao.OCRDao"/>

    <bean id="arkCaseOCRService" class="com.armedia.acm.services.ocr.service.ArkCaseOCRServiceImpl">
        <property name="ocrDao" ref="ocrDao"/>
        <property name="ecmFileVersionDao" ref="ecmFileVersionDao"/>
        <property name="pipelineManager" ref="mediaEnginePipelineManager"/>
        <property name="mediaEngineEventPublisher" ref="mediaEngineEventPublisher"/>
        <property name="activitiRuntimeService" ref="activitiRuntimeService"/>
        <property name="folderAndFilesUtils" ref="folderAndFilesUtils"/>
        <property name="springContextHolder" ref="acmContextHolder"/>
        <property name="processHandlerMap" ref="mediaEngineDrollsProcessRules"/>
        <property name="objectLockingManager" ref="acmObjectLockingManager"/>
        <property name="ecmFileService" ref="ecmFileService"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="objectLockService" ref="objectLockService"/>
        <property name="ocrProviderFactory" ref="ocrProviderFactory"/>
        <property name="mediaEngineMapper" ref="mediaEngineMapper"/>
        <property name="mediaEngineServiceFactory" ref="mediaEngineServiceFactory"/>
        <property name="arkCaseBeanUtils" ref="mediaEngineArkCaseBeanUtils"/>
        <property name="ecmFileTransaction" ref="ecmFileTransaction"/>
        <property name="ocrConfigurationService" ref="ocrConfigurationService"/>
        <property name="auditDao" ref="auditDao"/>
        <property name="acmBpmnService" ref="processDefinitionManagementService"/>
    </bean>

    <bean id="ocrQueueJobService" class="com.armedia.acm.services.ocr.job.OCRQueueJob">
        <property name="arkCaseOCRService" ref="arkCaseOCRService"/>
        <property name="activitiRuntimeService" ref="activitiRuntimeService"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="objectLockService" ref="objectLockService"/>
        <property name="objectLockingManager" ref="acmObjectLockingManager"/>
        <property name="mediaEngineMapper" ref="mediaEngineMapper"/>
        <property name="ocrProviderFactory" ref="ocrProviderFactory"/>
        <property name="ocrConfigurationService" ref="ocrConfigurationService"/>
    </bean>

    <bean id="ocrQueueJobDescriptor" class="com.armedia.acm.services.ocr.job.OCRQueueJobDescriptor" parent="acmJobDescriptor">
        <property name="ocrQueueJob" ref="ocrQueueJobService"/>
    </bean>

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

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

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

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

    <bean id="ocrProviders" class="java.util.HashMap">
        <constructor-arg>
            <map key-type="java.lang.String" value-type="com.armedia.acm.tool.ocr.service.OCRIntegrationService">
                <entry key="TESSERACT" value-ref="tesseractService"/>
            </map>
        </constructor-arg>
    </bean>

    <bean id="ocrProviderFactory" class="com.armedia.acm.services.ocr.factory.OCRProviderFactory">
        <property name="providers" ref="ocrProviders"/>
    </bean>

    <bean id="ocrConfig" class="com.armedia.acm.services.ocr.model.OCRConfiguration" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="ocrConfigurationService" class="com.armedia.acm.services.ocr.service.OCRConfigurationService">
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
        <property name="ocrConfig" ref="ocrConfig"/>
        <property name="ecmFileConfig" ref="ecmFileConfig"/>
    </bean>
</beans>