<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns="http://www.springframework.org/schema/beans"
       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="complaintFolderNameFormat" class="java.lang.String">
        <constructor-arg value="Complaint (%s)"/>
    </bean>

    <bean id="caseFileDetailsFormat" class="java.lang.String">
        <constructor-arg value="This case file is based on Complaint '%s'.%s"/>
    </bean>

    <bean id="complaintDetailsFormat" class="java.lang.String">
        <constructor-arg value="&lt;p/&gt;Complaint '%s' had these details:&lt;p/&gt;%s"/>
    </bean>

    <bean id="closeComplaintRequestService"
          class="com.armedia.acm.plugins.complaint.service.CloseComplaintRequestService">
        <property name="closeComplaintRequestDao" ref="closeComplaintRequestDao"/>
        <property name="complaintDao" ref="acmComplaintDao"/>
        <property name="complaintEventPublisher" ref="complaintEventPublisher"/>
        <property name="saveCaseService" ref="saveCaseService"/>
        <property name="caseFileDao" ref="caseFileDao"/>
        <property name="ecmFileDao" ref="ecmFileDao"/>
        <property name="ecmFileService" ref="ecmFileService"/>
        <property name="complaintFolderNameFormat" ref="complaintFolderNameFormat"/>
        <property name="caseFileDetailsFormat" ref="caseFileDetailsFormat"/>
        <property name="complaintDetailsFormat" ref="complaintDetailsFormat"/>
        <property name="caseFileEventUtility" ref="caseFileEventUtility"/>
    </bean>

    <bean id="closeComplaintRequestProcessEndHandler"
          class="com.armedia.acm.plugins.complaint.service.CloseComplaintRequestProcessEndHandler">
        <property name="closeComplaintRequestService" ref="closeComplaintRequestService"/>
    </bean>

    <bean id="acmComplaintDao" class="com.armedia.acm.plugins.complaint.dao.ComplaintDao">
        <aop:scoped-proxy/>
    </bean>
    <bean id="closeComplaintRequestDao" class="com.armedia.acm.plugins.complaint.dao.CloseComplaintRequestDao"/>

    <!-- pre-save handlers -->
    <bean id="complaintSetCreatorHandler"
          class="com.armedia.acm.plugins.complaint.pipeline.presave.ComplaintSetCreatorHandler"/>
    <bean id="complaintContainerHandler"
          class="com.armedia.acm.plugins.complaint.pipeline.presave.ComplaintContainerHandler">
        <property name="fileParticipantService" ref="fileParticipantService"/>
    </bean>

    <!-- post-save handlers -->
    <bean id="complaintRulesHandler" class="com.armedia.acm.plugins.complaint.pipeline.postsave.ComplaintRulesHandler">
        <property name="saveRule" ref="saveComplaintBusinessRule"/>
    </bean>
    <bean id="complaintEcmFolderHandler"
          class="com.armedia.acm.plugins.complaint.pipeline.postsave.ComplaintEcmFolderHandler">
        <property name="ecmFileService" ref="ecmFileService"/>
    </bean>
    <bean id="complaintOutlookHandler"
          class="com.armedia.acm.plugins.complaint.pipeline.postsave.ComplaintOutlookHandler">
        <property name="autoCreateFolderForComplaint" value="#{complaintConfig.autoCreateCalendarFolder}"/>
        <property name="outlookContainerCalendarService" ref="outlookContainerService"/>
        <property name="calendarAdminService" ref="outlookCalendarAdminServiceExtension"/>
    </bean>
    <bean id="complaintDocumentHandler"
          class="com.armedia.acm.plugins.complaint.pipeline.postsave.ComplaintDocumentHandler"
          parent="pdfComplaintDocumentGenerator">
        <property name="formsTypeCheckService" ref="formsTypeCheckService"/>
        <property name="dao" ref="acmComplaintDao"/>
    </bean>
    <bean id="complaintTagHandler" class="com.armedia.acm.plugins.complaint.pipeline.postsave.ComplaintTagHandler">
        <property name="associatedTagService" ref="associatedTagService" />
        <property name="tagService" ref="tagService" />
    </bean>

    <bean id="complaintPipelineManager" class="com.armedia.acm.services.pipeline.PipelineManager">
        <property name="preSaveHandlers">
            <list value-type="com.armedia.acm.services.pipeline.handler.PipelineHandler">
                <ref bean="complaintSetCreatorHandler"/>
            </list>
        </property>
        <property name="postSaveHandlers">
            <list value-type="com.armedia.acm.services.pipeline.handler.PipelineHandler">
                <ref bean="complaintRulesHandler"/>
                <ref bean="complaintContainerHandler"/>
                <ref bean="complaintEcmFolderHandler"/>
                <ref bean="complaintOutlookHandler"/>
                <ref bean="complaintDocumentHandler"/>
                <ref bean="complaintTagHandler" />
            </list>
        </property>
    </bean>

    <bean id="pdfComplaintDocumentGenerator"
          class="com.armedia.acm.plugins.complaint.service.PDFComplaintDocumentGenerator"
          parent="pdfDocumentGenerator">
    </bean>

    <bean id="saveComplaintTransaction" class="com.armedia.acm.plugins.complaint.service.SaveComplaintTransaction">
        <property name="complaintDao" ref="acmComplaintDao"/>
        <property name="pipelineManager" ref="complaintPipelineManager"/>
    </bean>

    <bean id="complaintToSolrTransformer" class="com.armedia.acm.plugins.complaint.service.ComplaintToSolrTransformer">
        <property name="userDao" ref="userJpaDao"/>
        <property name="complaintDao" ref="acmComplaintDao"/>
        <property name="businessProcessDao" ref="businessProcessDao"/>
        <property name="searchAccessControlFields" ref="searchAccessControlFields"/>
        <property name="fileAclSolrUpdateHelper" ref="fileAclSolrUpdateHelper"/>
    </bean>

    <bean id="complaintPlugin" class="com.armedia.acm.pluginmanager.model.AcmPlugin">
        <property name="pluginName" value="Complaint Plugin"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
        <property name="suportedObjectTypesNames">
            <list>
                <value>COMPLAINT</value>
            </list>
        </property>
        <property name="pluginConfig" ref="complaintConfig"/>
    </bean>

    <bean id="complaintEventPublisher" class="com.armedia.acm.plugins.complaint.service.ComplaintEventPublisher">
        <property name="acmDiffService" ref="acmDiffService"/>
    </bean>

    <bean id="saveComplaintBusinessRule" class="com.armedia.acm.plugins.complaint.service.SaveComplaintBusinessRule"
          parent="simpleStatelessSingleObjectRuleManager">
        <property name="ruleSpreadsheetFilename" value="drools-complaint-number-rules.xlsx"/>
    </bean>

    <bean id="complaintFactory" class="com.armedia.acm.plugins.complaint.service.ComplaintFactory">
        <property name="personDao" ref="acmPersonDao"/>
        <property name="personAssociationDao" ref="acmPersonAssociationDao"/>
        <property name="fileService" ref="ecmFileService"/>
        <property name="userDao" ref="userJpaDao"/>
        <property name="acmParticipantDao" ref="acmParticipantDao"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
    </bean>

    <bean id="complaintService" class="com.armedia.acm.plugins.complaint.service.ComplaintService"
          parent="frevvoFormService"
          scope="prototype">
        <property name="complaintFactory" ref="complaintFactory"/>
        <property name="saveComplaintTransaction" ref="saveComplaintTransaction"/>
        <property name="personDao" ref="acmPersonDao"/>
        <property name="complaintEventPublisher" ref="complaintEventPublisher"/>
        <property name="tagService" ref="tagService"/>
        <property name="associatedTagService" ref="associatedTagService"/>
    </bean>

    <bean id="complaintHistoryListener" class="com.armedia.acm.plugins.complaint.service.ComplaintHistoryListener">
        <property name="acmObjectHistoryService" ref="acmObjectHistoryService"/>
    </bean>

    <bean id="complaintEventListener" class="com.armedia.acm.plugins.complaint.service.ComplaintEventListener">
        <property name="acmObjectHistoryService" ref="acmObjectHistoryService"/>
        <property name="acmObjectHistoryEventPublisher" ref="acmObjectHistoryEventPublisher"/>
        <property name="complaintEventPublisher" ref="complaintEventPublisher"/>
        <property name="acmAssignmentDao" ref="acmAssignmentDao"/>
        <property name="calendarService" ref="outlookContainerService"/>
        <property name="shouldDeleteCalendarFolder" value="#{complaintConfig.deleteCalendarFolderAfterComplaintClosed}"/>
        <property name="complaintStatusClosed" value="#{complaintConfig.statusClosed}"/>
        <property name="calendarAdminService" ref="outlookCalendarAdminServiceExtension"/>
        <property name="objectConverter" ref="objectConverter"/>
        <property name="folderCreatorDao" ref="outlookFolderCreatorDao"/>
    </bean>

    <bean id="complaintDataAccessUpdateLocator"
          class="com.armedia.acm.plugins.complaint.service.ComplaintDataAccessUpdateLocator">
        <property name="complaintDao" ref="acmComplaintDao"/>
    </bean>

    <bean id="complaintCaptureFileEventListener"
          class="com.armedia.acm.plugins.complaint.service.ComplaintCaptureFileEventListener">
        <property name="watchFolder" ref="captureFolder"/>
        <property name="workingFolder" ref="workingFolder"/>
        <property name="completedFolder" ref="completedFolder"/>
        <property name="errorFolder" ref="errorFolder"/>
        <property name="saveComplaintTransaction" ref="saveComplaintTransaction"/>
        <property name="ecmFileService" ref="ecmFileService"/>
        <property name="loadingDocumentsSeconds" value="#{complaintConfig.ephesoftLoadDocumentsSeconds}"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="OXMFilePath" value="${user.home}/.arkcase/acm#{captureConfig.oxmFilePath}"/>
    </bean>

    <bean id="closeComplaintTaskName" class="java.lang.String">
        <constructor-arg>
            <value>Request to Close Complaint '%s'</value>
        </constructor-arg>
    </bean>

    <bean id="pdfCloseComplaintDocumentGenerator"
          class="com.armedia.acm.plugins.complaint.service.PDFCloseComplaintDocumentGenerator"
          parent="pdfDocumentGenerator">
        <property name="dao" ref="acmComplaintDao"/>
        <property name="caseFileDao" ref="caseFileDao"/>
    </bean>

    <bean id="complaintCloseWorkflowListener"
          class="com.armedia.acm.plugins.complaint.service.CloseComplaintWorkflowListener">
        <property name="fileWorkflowBusinessRule" ref="fileWorkflowBusinessRule"/>
        <property name="taskDao" ref="acmTaskDao"/>
        <property name="closeComplaintTaskName" ref="closeComplaintTaskName"/>
        <property name="closeComplaintRequestService" ref="closeComplaintRequestService"/>
    </bean>

    <bean id="checkCloseComplaintRequest"
          class="com.armedia.acm.plugins.complaint.pipeline.presave.CheckCloseComplaintRequest">
        <property name="complaintDao" ref="acmComplaintDao"/>
    </bean>

    <bean id="closeComplaintHandler" class="com.armedia.acm.plugins.complaint.pipeline.postsave.CloseComplaintHandler">
        <property name="complaintDao" ref="acmComplaintDao"/>
    </bean>

    <bean id="createTaskCloseComplaintHandler"
          class="com.armedia.acm.plugins.complaint.pipeline.postsave.CreateTaskCloseComplaintHandler">
        <property name="ecmFileDao" ref="ecmFileDao"/>
    </bean>

    <bean id="closeComplaintPipelineManager" class="com.armedia.acm.services.pipeline.PipelineManager">
        <property name="preSaveHandlers">
            <list value-type="com.armedia.acm.services.pipeline.handler.PipelineHandler">
                <ref bean="checkCloseComplaintRequest"/>
            </list>
        </property>
        <property name="postSaveHandlers">
            <list value-type="com.armedia.acm.services.pipeline.handler.PipelineHandler">
                <ref bean="pdfCloseComplaintDocumentGeneratorHandler"/>
                <ref bean="closeComplaintHandler"/>
                <ref bean="createTaskCloseComplaintHandler"/>
            </list>
        </property>
    </bean>

    <bean id="closeComplaint" class="com.armedia.acm.plugins.complaint.service.CloseComplaintServiceImpl">
        <property name="closeComplaintRequestDao" ref="closeComplaintRequestDao"/>
        <property name="pipelineManager" ref="closeComplaintPipelineManager"/>
        <property name="organizationDao" ref="acmOrganizationDao"/>
        <property name="personDao" ref="acmPersonDao"/>
    </bean>

    <bean id="pdfCloseComplaintDocumentGeneratorHandler"
          class="com.armedia.acm.plugins.complaint.pipeline.postsave.PDFCloseComplaintDocumentGeneratorHandler"
          parent="pdfCloseComplaintDocumentGenerator">
        <property name="formsTypeCheckService" ref="formsTypeCheckService"/>
        <property name="dao" ref="acmComplaintDao"/>
    </bean>

    <bean id="complaintConfig" class="com.armedia.acm.plugins.complaint.model.ComplaintConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="complaintBillingInvoiceEmailSenderService"
        class="com.armedia.acm.plugins.complaint.service.ComplaintBillingInvoiceEmailSenderService">
        <property name="complaintDao" ref="acmComplaintDao"/>
        <property name="billingService" ref="billingService"/>
        <property name="notificationSender" ref="notificationSender"/>
        <property name="notificationDao" ref="notificationDao"/>
        <property name="fileService" ref="ecmFileService"/>
        <property name="translationService" ref="translationService" />
        <property name="templateManager" ref="correspondenceTemplateManager"/>
    </bean>

    <bean id="getComplaintByNumberService" class="com.armedia.acm.plugins.complaint.service.GetComplaintByNumberService">
        <property name="complaintDao" ref="acmComplaintDao"/>
    </bean>

    <bean id="complaintBillingInvoiceCreatedHandler"
        class="com.armedia.acm.plugins.complaint.listener.ComplaintBillingInvoiceCreatedHandler">
        <property name="complaintBillingInvoiceDocumentGenerator" ref="billingInvoiceDocumentGenerator"/>
        <property name="complaintDao" ref="acmComplaintDao"/>
    </bean>

    <bean id="getComplaintService" class="com.armedia.acm.plugins.complaint.service.GetComplaintServiceImpl">
        <property name="complaintDao" ref="acmComplaintDao"/>
    </bean>

    <bean id="complaintTemplateModelProvider" class="com.armedia.acm.plugins.complaint.model.provider.ComplaintTemplateModelProvider"/>

    <bean id="complaintUpdatedNotifier" class="com.armedia.acm.plugins.complaint.service.ComplaintUpdatedNotifier">
        <property name="notificationService" ref="notificationService"/>
        <property name="complaintDao" ref="acmComplaintDao"/>
        <property name="templateManager" ref="correspondenceTemplateManager"/>
    </bean>

</beans>
