<?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:context="http://www.springframework.org/schema/context" 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/context
    http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <context:annotation-config/>

    <bean id="acmPersonDao" class="com.armedia.acm.plugins.person.dao.PersonDao"/>
    <bean id="acmPersonContactDao" class="com.armedia.acm.plugins.person.dao.PersonContactDao"/>
    <bean id="acmPersonAliasDao" class="com.armedia.acm.plugins.person.dao.PersonAliasDao"/>
    <bean id="acmPersonAssociationDao" class="com.armedia.acm.plugins.person.dao.PersonAssociationDao"/>
    <bean id="acmOrganizationAssociationDao" class="com.armedia.acm.plugins.person.dao.OrganizationAssociationDao"/>
    <bean id="acmIdentificationDao" class="com.armedia.acm.plugins.person.dao.IdentificationDao"/>
    <bean id="acmOrganizationDao" class="com.armedia.acm.plugins.person.dao.OrganizationDao"/>

    <bean id="organizationService" class="com.armedia.acm.plugins.person.service.OrganizationServiceImpl">
        <property name="organizationDao" ref="acmOrganizationDao"/>
        <property name="organizationPipelineManager" ref="organizationPipelineManager"/>
        <property name="phoneRegexConfig" ref="phoneRegexConfig"/>
    </bean>
    <bean id="organizationPipelineManager" class="com.armedia.acm.services.pipeline.PipelineManager">
        <property name="preSaveHandlers">
            <list value-type="com.armedia.acm.services.pipeline.handler.PipelineHandler">
                <ref bean="organizationSetCreatorHandler"/>
            </list>
        </property>
        <property name="postSaveHandlers">
            <list>
                <ref bean="organizationExtractParentAssociationHandler"/>
            </list>
        </property>
    </bean>

    <bean id="organizationAssociationListener" class="com.armedia.acm.plugins.person.service.OrganizationAssociationListener">
        <property name="organizationDao" ref="acmOrganizationDao"/>
        <property name="associationService" ref="objectAssociationService"/>
    </bean>

    <bean id="personService" class="com.armedia.acm.plugins.person.service.PersonServiceImpl">
        <property name="personDao" ref="acmPersonDao"/>
        <property name="acmFolderService" ref="acmFolderService"/>
        <property name="ecmFileService" ref="ecmFileService"/>
        <property name="folderAndFilesUtils" ref="folderAndFilesUtils"/>
        <property name="personEventPublisher" ref="personEventPublisher"/>
        <property name="personPipelineManager" ref="personPipelineManager"/>
        <property name="fileParticipantService" ref="fileParticipantService"/>
        <property name="objectConverter" ref="objectConverter"/>
        <property name="ecmTikaFileService" ref="ecmTikaFileService"/>
        <property name="personConfig" ref="personConfig"/>
        <property name="phoneRegexConfig" ref="phoneRegexConfig"/>
        <property name="executeSolrQuery" ref="executeSolrQuery"/>

    </bean>

    <bean id="personPipelineManager" class="com.armedia.acm.services.pipeline.PipelineManager">
        <property name="preSaveHandlers">
            <list value-type="com.armedia.acm.services.pipeline.handler.PipelineHandler">
                <ref bean="personSetCreatorHandler"/>
            </list>
        </property>
        <property name="postSaveHandlers">
            <list></list>
        </property>
    </bean>

    <bean id="savePersonTransaction" class="com.armedia.acm.plugins.person.service.SavePersonTransaction">
        <property name="personDao" ref="acmPersonDao"/>
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
    </bean>

    <bean id="personEventPublisher" class="com.armedia.acm.plugins.person.service.PersonEventPublisher">
        <property name="acmDiffService" ref="acmDiffService"/>
    </bean>
    <bean id="organizationEventPublisher" class="com.armedia.acm.plugins.person.service.OrganizationEventPublisher">
        <property name="acmDiffService" ref="acmDiffService"/>
    </bean>

    <bean id="savePersonAssociationTransaction" class="com.armedia.acm.plugins.person.service.SavePersonAssociationTransaction">
        <property name="auditPropertyEntityAdapter" ref="auditPropertyEntityAdapter"/>
        <property name="personAssociationDao" ref="acmPersonAssociationDao"/>
    </bean>

    <bean id="personAssociationEventPublisher" class="com.armedia.acm.plugins.person.service.PersonAssociationEventPublisher">
        <property name="objectConverter" ref="objectConverter"/>
    </bean>
    <bean id="organizationAssociationEventPublisher" class="com.armedia.acm.plugins.person.service.OrganizationAssociationEventPublisher">
        <property name="objectConverter" ref="objectConverter"/>
    </bean>

    <bean id="personToSolrTransformer" class="com.armedia.acm.plugins.person.service.PersonToSolrTransformer">
        <property name="personDao" ref="acmPersonDao"/>
        <property name="userDao" ref="userJpaDao"/>
        <property name="searchAccessControlFields" ref="searchAccessControlFields"/>
    </bean>
    <bean id="organizationToSolrTransformer" class="com.armedia.acm.plugins.person.service.OrganizationToSolrTransformer">
        <property name="organizationDao" ref="acmOrganizationDao"/>
        <property name="userDao" ref="userJpaDao"/>
        <property name="searchAccessControlFields" ref="searchAccessControlFields"/>
    </bean>

    <bean id="organizationAssociationToSolrTransformer"
          class="com.armedia.acm.plugins.person.service.OrganizationAssociationToSolrTransformer">
        <property name="organizationAssociationDao" ref="acmOrganizationAssociationDao"/>
        <property name="userDao" ref="userJpaDao"/>
    </bean>
    <bean id="personAssociationToSolrTransformer" class="com.armedia.acm.plugins.person.service.PersonAssociationToSolrTransformer">
        <property name="personAssociationDao" ref="acmPersonAssociationDao"/>
        <property name="userDao" ref="userJpaDao"/>
    </bean>

    <bean id="personContactToSolrTransformer" class="com.armedia.acm.plugins.person.service.PersonContactToSolrTransformer">
        <property name="personContactDao" ref="acmPersonContactDao"/>
        <property name="userDao" ref="userJpaDao"/>
    </bean>

    <bean id="personAliasToSolrTransformer" class="com.armedia.acm.plugins.person.service.PersonAliasToSolrTransformer">
        <property name="personAliasDao" ref="acmPersonAliasDao"/>
        <property name="userDao" ref="userJpaDao"/>
    </bean>

    <bean id="personPlugin" class="com.armedia.acm.pluginmanager.model.AcmPlugin">
        <property name="pluginName" value="Person Plugin"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
        <property name="suportedObjectTypesNames">
            <list>
                <value>PERSON</value>
                <value>ORGANIZATION</value>
            </list>
        </property>
        <property name="pluginConfig" ref="personConfig"/>
    </bean>

    <bean id="personAssociationPlugin" class="com.armedia.acm.pluginmanager.model.AcmPlugin">
        <property name="pluginName" value="PersonAssocaition Plugin"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
    </bean>

    <bean id="personAssociationService" class="com.armedia.acm.plugins.person.service.PersonAssociationServiceImpl">
        <property name="personAssociationTransaction" ref="savePersonAssociationTransaction"/>
        <property name="personAssociationDao" ref="acmPersonAssociationDao"/>
        <property name="personAssociationEventPublisher" ref="personAssociationEventPublisher"/>
        <property name="solrJoinDocumentsService" ref="solrJoinDocumentsService"/>
        <property name="objectConverter" ref="objectConverter"/>
    </bean>

    <bean id="organizationAssociationService" class="com.armedia.acm.plugins.person.service.OrganizationAssociationServiceImpl">
        <property name="organizationAssociationDao" ref="acmOrganizationAssociationDao"/>
        <property name="organizationAssociationEventPublisher" ref="organizationAssociationEventPublisher"/>
        <property name="solrJoinDocumentsService" ref="solrJoinDocumentsService"/>
    </bean>

    <bean id="organizationHistoryListener" class="com.armedia.acm.plugins.person.service.OrganizationHistoryListener">
        <property name="acmObjectHistoryService" ref="acmObjectHistoryService"/>
        <property name="nonHistoryGeneratingEvents">
            <list></list>
        </property>
    </bean>

    <bean id="personConfig" class="com.armedia.acm.plugins.person.model.PersonConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="userEmailToSolrTransformer" class="com.armedia.acm.plugins.person.service.UserEmailToSolrTransformer">
        <property name="userDao" ref="userJpaDao"/>
    </bean>

    <bean id="personEmailToSolrTransformer" class="com.armedia.acm.plugins.person.service.PersonEmailToSolrTransformer">
        <property name="personDao" ref="acmPersonDao"/>
    </bean>

    <bean id="organizationEmailToSolrTransformer" class="com.armedia.acm.plugins.person.service.OrganizationEmailToSolrTransformer">
        <property name="organizationDao" ref="acmOrganizationDao"/>
        <property name="userDao" ref="userJpaDao"/>
    </bean>

    <bean id="createPersonFromUser" class="com.armedia.acm.plugins.person.service.CreatePersonFromUser">
        <property name="personService" ref="personService"/>
        <property name="personDao" ref="acmPersonDao"/>
    </bean>


</beans>
