<?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="buckslipTaskHelper" class="com.armedia.acm.plugins.task.listener.BuckslipTaskHelper"/>

    <bean id="buckslipTaskCompletedListener" class="com.armedia.acm.plugins.task.listener.BuckslipTaskCompletedListener">
        <property name="userDao" ref="userJpaDao"/>
        <property name="buckslipTaskHelper" ref="buckslipTaskHelper"/>
    </bean>

    <bean id="buckslipWithdrawnListener" class="com.armedia.acm.plugins.task.listener.BuckslipWithdrawnListener">
        <property name="buckslipTaskHelper" ref="buckslipTaskHelper"/>
    </bean>

    <bean id="adHocTaskCompletedListener" class="com.armedia.acm.plugins.task.listener.AdHocTaskCompletedListener">
        <property name="notificationService" ref="notificationService"/>
        <property name="templateManager" ref="correspondenceTemplateManager"/>
        <property name="taskConfig" ref="taskConfig"/>
    </bean>

    <bean id="taskStatusChangedListener" class="com.armedia.acm.plugins.task.listener.TaskUpdatedNotifier">
        <property name="notificationService" ref="notificationService"/>
        <property name="taskConfig" ref="taskConfig"/>
        <property name="userDao" ref="userJpaDao"/>
        <property name="notificationUtils" ref="notificationUtils"/>
        <property name="assignmentDao" ref="acmAssignmentDao"/>
        <property name="templateManager" ref="correspondenceTemplateManager"/>
    </bean>

    <bean id="taskPlugin" class="com.armedia.acm.pluginmanager.model.AcmPlugin">
        <property name="pluginName" value="Task Plugin"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
        <property name="pluginConfig" ref="taskConfig"/>
        <property name="suportedObjectTypesNames">
            <list>
                <value>TASK</value>
            </list>
        </property>
    </bean>

    <bean id="priorityLevelToNumberMap" class="java.util.HashMap">
        <constructor-arg>
            <map key-type="java.lang.String" value-type="java.lang.Integer">
                <entry key="Low" value="10"/>
                <entry key="Medium" value="50"/>
                <entry key="High" value="70"/>
                <entry key="Expedite" value="90"/>
            </map>
        </constructor-arg>
    </bean>

    <bean id="taskChangeNotifier" class="com.armedia.acm.plugins.task.service.TaskChangeNotifier">
        <property name="acmObjectChangedNotifier" ref="acmObjectChangeNotifier"/>
    </bean>

    <bean id="acmTaskDao" class="com.armedia.acm.plugins.task.service.impl.ActivitiTaskDao">
        <property name="activitiRuntimeService" ref="activitiRuntimeService"/>
        <property name="acmBpmnService" ref="processDefinitionManagementService"/>
        <property name="activitiTaskService" ref="activitiTaskService"/>
        <property name="activitiRepositoryService" ref="activitiRepositoryService"/>
        <property name="activitiHistoryService" ref="activitiHistoryService"/>
        <property name="userDao" ref="userJpaDao"/>
        <property name="participantDao" ref="acmParticipantDao"/>
        <property name="dataAccessPrivilegeListener" ref="dataAccessPrivilegeListener"/>
        <property name="containerFolderDao" ref="acmContainerFolderDao"/>
        <property name="fileService" ref="ecmFileService"/>
        <property name="fileDao" ref="ecmFileDao"/>
        <property name="taskBusinessRule" ref="taskBusinessRule"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="priorityLevelToNumberMap" ref="priorityLevelToNumberMap"/>
        <property name="taskEventPublisher" ref="taskEventPublisher"/>
        <property name="objectConverter" ref="objectConverter"/>
        <property name="fileParticipantService" ref="fileParticipantService"/>
        <property name="ecmFileService" ref="ecmFileService"/>
        <property name="requiredFieldsPerOutcomeMap">
            <map>
                <entry key="APPROVE">
                    <list/>
                </entry>
                <entry key="SEND_FOR_REWORK">
                    <list>
                        <value>reworkInstructions</value>
                    </list>
                </entry>
                <entry key="RESUBMIT">
                    <list/>
                </entry>
                <entry key="CANCEL_DOCUMENT">
                    <list/>
                </entry>
            </map>
        </property>
    </bean>

    <bean id="taskEventPublisher" class="com.armedia.acm.plugins.task.service.TaskEventPublisher"/>

    <bean id="acmApplicationTaskEventListener" class="com.armedia.acm.plugins.task.service.impl.AcmApplicationTaskEventListener">
        <property name="acmObjectHistoryService" ref="acmObjectHistoryService"/>
        <property name="acmObjectHistoryEventPublisher" ref="acmObjectHistoryEventPublisher"/>
        <property name="taskEventPublisher" ref="taskEventPublisher"/>
        <property name="acmAssignmentDao" ref="acmAssignmentDao"/>
        <property name="objectConverter" ref="objectConverter"/>
    </bean>

    <bean id="taskToSolrTransformer" class="com.armedia.acm.plugins.task.service.impl.TaskToSolrTransformer">
        <property name="taskDao" ref="acmTaskDao"/>
        <property name="userDao" ref="userJpaDao"/>
        <property name="acmDataService" ref="acmDataService"/>
        <property name="fileAclSolrUpdateHelper" ref="fileAclSolrUpdateHelper"/>
        <property name="searchAccessControlFields" ref="searchAccessControlFields"/>
    </bean>

    <bean id="taskHistoryListener" class="com.armedia.acm.plugins.task.service.TaskHistoryListener">
        <property name="acmObjectHistoryService" ref="acmObjectHistoryService"/>
    </bean>

    <bean id="activitiTaskHistoryListener" class="com.armedia.acm.plugins.task.service.ActivitiTaskHistoryListener">
        <property name="acmObjectHistoryService" ref="acmObjectHistoryService"/>
        <property name="activitiTaskDao" ref="acmTaskDao"/>
    </bean>

    <bean id="uploadFileToTaskListener" class="com.armedia.acm.plugins.task.service.UploadFileToTaskListener">
        <property name="activitiTaskDao" ref="acmTaskDao"/>
        <property name="acmFolderDao" ref="acmFolderDao"/>
        <property name="acmTaskService" ref="acmTaskService"/>
    </bean>


    <bean id="taskDataAccessUpdateLocator" class="com.armedia.acm.plugins.task.service.impl.TaskDataAccessUpdateLocator">
        <property name="taskDao" ref="acmTaskDao"/>
    </bean>

    <bean id="taskBusinessRule" class="com.armedia.acm.plugins.task.service.impl.TaskBusinessRule"
          parent="simpleStatelessSingleObjectRuleManager">
        <property name="ruleSpreadsheetFilename" value="drools-task-rules.xlsx"/>
    </bean>

    <bean id="acmTaskService" class="com.armedia.acm.plugins.task.service.impl.AcmTaskServiceImpl">
        <property name="executeSolrQuery" ref="executeSolrQuery"/>
        <property name="acmContainerDao" ref="acmContainerFolderDao"/>
        <property name="taskDao" ref="acmTaskDao"/>
        <property name="fileDao" ref="ecmFileDao"/>
        <property name="taskEventPublisher" ref="taskEventPublisher"/>
        <property name="acmFolderService" ref="acmFolderService"/>
        <property name="noteDao" ref="noteDao"/>
        <property name="ecmFileService" ref="ecmFileService"/>
        <property name="objectAssociationService" ref="objectAssociationService"/>
        <property name="acmParticipantDao" ref="acmParticipantDao"/>
        <property name="objectConverter" ref="objectConverter"/>
        <property name="authenticationMapper" ref="acmAuthenticationMapper"/>
        <property name="saveBusinessProcess" ref="saveBusinessProcess"/>
        <property name="notificationDao" ref="notificationDao"/>
        <property name="acmDataService" ref="acmDataService"/>
        <property name="fileWorkflowBusinessRule" ref="fileWorkflowBusinessRule"/>
        <property name="activitiRuntimeService" ref="activitiRuntimeService"/>
        <property name="translationService" ref="translationService" />
        <property name="fileParticipantService" ref="fileParticipantService"/>
        <property name="templateManager" ref="correspondenceTemplateManager"/>
    </bean>

    <bean id="acmApplicationTaskEventHandler" class="com.armedia.acm.plugins.task.service.impl.AcmApplicationTaskEventHandler">
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="taskDao" ref="acmTaskDao"/>
        <property name="sendDocumentsToSolr" ref="sendDocumentsToSolr"/>
        <property name="taskToSolrTransformer" ref="taskToSolrTransformer"/>
        <property name="eventList">
            <list value-type="java.lang.String">
                <value>create</value>
                <value>complete</value>
                <value>delete</value>
                <value>save</value>
                <value>assignment</value>
                <value>claim</value>
                <value>unclaim</value>
            </list>
        </property>
    </bean>

    <bean id="acmTaskActivitiEventHandler" class="com.armedia.acm.plugins.task.service.impl.AcmTaskActivitiEventHandler">
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="taskDao" ref="acmTaskDao"/>
        <property name="dataAccessPrivilegeListener" ref="dataAccessPrivilegeListener"/>
        <property name="acmParticipantDao" ref="acmParticipantDao"/>
        <property name="sendDocumentsToSolr" ref="sendDocumentsToSolr"/>
        <property name="taskToSolrTransformer" ref="taskToSolrTransformer"/>
        <property name="eventList">
            <list value-type="java.lang.String">
                <value>create</value>
                <value>complete</value>
                <value>delete</value>
                <value>save</value>
                <value>terminate</value>
                <value>claim</value>
                <value>unclaim</value>
            </list>
        </property>
        <property name="taskService" ref="activitiTaskService"/>
    </bean>

    <bean id="upcomingTasksNotifier" class="com.armedia.acm.plugins.task.service.impl.UpcomingTasksNotifier">
        <property name="activitiTaskService" ref="activitiTaskService"/>
        <property name="activitiTaskDao" ref="acmTaskDao"/>
        <property name="userDao" ref="userJpaDao"/>
        <property name="taskNotificationConfig" ref="taskNotificationConfig"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="notificationService" ref="notificationService"/>
        <property name="templateManager" ref="correspondenceTemplateManager"/>
    </bean>

    <bean id="upcomingTaskNotifierJobDescription" class="com.armedia.acm.plugins.task.service.UpcomingTaskNotifierJobDescription"
          parent="acmJobDescriptor">
        <property name="upcomingTasksNotifier" ref="upcomingTasksNotifier"/>
    </bean>

    <bean id="overdueTasksNotifier" class="com.armedia.acm.plugins.task.service.impl.OverdueTasksNotifier">
        <property name="activitiTaskService" ref="activitiTaskService"/>
        <property name="activitiTaskDao" ref="acmTaskDao"/>
        <property name="userDao" ref="userJpaDao"/>
        <property name="taskNotificationConfig" ref="taskNotificationConfig"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="notificationService" ref="notificationService"/>
        <property name="templateManager" ref="correspondenceTemplateManager"/>
    </bean>

    <bean id="overdueTaskNotifierJobDescriptor" class="com.armedia.acm.plugins.task.service.OverdueTaskNotifierJobDescriptor"
          parent="acmJobDescriptor">
        <property name="overdueTasksNotifier" ref="overdueTasksNotifier"/>
    </bean>

    <bean id="taskTemplateModelProvider" class="com.armedia.acm.plugins.task.model.provider.TaskTemplateModelProvider">
        <property name="springContextHolder" ref="acmContextHolder"/>
    </bean>

    <bean id="createAdHocTaskService" class="com.armedia.acm.plugins.task.service.impl.CreateAdHocTaskService">
        <property name="taskDao" ref="acmTaskDao"/>
        <property name="taskEventPublisher" ref="taskEventPublisher"/>
        <property name="executeSolrQuery" ref="executeSolrQuery"/>
        <property name="searchResults" ref="searchResults"/>
        <property name="ecmFileService" ref="ecmFileService"/>
        <property name="acmTaskService" ref="acmTaskService"/>
    </bean>

    <bean id="taskNotificationConfig" class="com.armedia.acm.plugins.task.model.TaskNotificationConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="taskConfig" class="com.armedia.acm.plugins.task.model.TaskConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>
</beans>
