<?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="adminPlugin" class="com.armedia.acm.pluginmanager.model.AcmPlugin">
        <property name="pluginName" value="Admin Plugin"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
    </bean>

    <!-- LDAP configuration API -->
    <bean id="ldapConfigurationService" class="com.armedia.acm.plugins.admin.service.LdapConfigurationService">
        <property name="encryptablePropertyUtils" ref="acmEncryptablePropertyUtils"/>
        <property name="acmLdapConfig" ref="acmSpringLdapConfig"/>
        <property name="acmLdapBeanSyncService" ref="acmLdapBeanSyncService"/>
    </bean>

    <bean id="workflowConfigurationService" class="com.armedia.acm.plugins.admin.service.WorkflowConfigurationService">
        <property name="acmBpmnService" ref="processDefinitionManagementService"/>
        <property name="temporaryFolder" value="#{ systemProperties ['user.home'] }/.arkcase/acm/activiti/temp/"/>
    </bean>

    <bean id="linkFormsWorkflowsService" class="com.armedia.acm.plugins.admin.service.LinkFormsWorkflowsService">
        <property name="configurationFile" value="#{fileWorkflowBusinessRule.getRuleSpreadsheetFilename()}"/>
        <property name="configurationFileBackupTemplate" value="drools-form-business-process-rules.xlsx.%s.backup"/>
        <property name="fileConfigurationService" ref="fileConfigurationServiceImpl"/>
        <property name="configurationClientConfig" ref="configurationClientConfig"/>
        <property name="acmBpmnService" ref="processDefinitionManagementService"/>
        <property name="acmFileTypesService" ref="acmFileTypesService"/>
    </bean>

    <bean id="customCssService" class="com.armedia.acm.plugins.admin.service.CustomCssService">
        <property name="customCssFile" value="#{ systemProperties ['user.home'] }/.arkcase/custom/branding/custom.css"/>
        <property name="fileConfigurationService" ref="fileConfigurationServiceImpl"/>
        <property name="configurationClientConfig" ref="configurationClientConfig"/>
        <property name="customCssFileName" value="custom.css"/>
    </bean>

    <bean id="customLogoService" class="com.armedia.acm.plugins.admin.service.CustomLogoService">
        <property name="brandingFilesLocation" value="#{ systemProperties ['user.home'] }/.arkcase/custom/branding/"/>
        <property name="fileConfigurationService" ref="fileConfigurationServiceImpl"/>
        <property name="configurationClientConfig" ref="configurationClientConfig"/>
        <property name="headerLogoFile" value="header-logo.png"/>
        <property name="loginLogoFile" value="login-logo.png"/>
        <property name="emailLogoFile" value="email-logo.png"/>
        <property name="headerLogoPortalFile" value="header-logo-portal.png"/>
        <property name="loginLogoPortalFile" value="login-logo-portal.png"/>
        <property name="bannerLogoPortalFile" value="banner-portal.png"/>
    </bean>

    <bean id="moduleConfigurationService" class="com.armedia.acm.plugins.admin.service.ModuleConfigurationService">
        <property name="configurationContainer" ref="configurationContainer"/>
    </bean>

    <bean id="googleAnalyticsConfigService" class="com.armedia.acm.plugins.admin.service.GoogleAnalyticsConfigService">
        <property name="config" ref="googleAnalyticsConfig"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
    </bean>

    <!-- Roles Privileges API-->
    <bean id="rolesPrivilegesService" class="com.armedia.acm.plugins.admin.service.RolesPrivilegesService">
        <property name="userDao" ref="userJpaDao"/>
        <property name="rolesConfig" ref="applicationRolesConfig"/>
        <property name="privilegesConfig" ref="applicationPrivilegesConfig"/>
        <property name="rolesToPrivilegesConfig" ref="rolesToPrivileges"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
        <property name="collectionPropertiesConfigurationService" ref="collectionPropertiesConfigurationService"/>
        <property name="functionalAccessService" ref="functionalAccessService"/>
    </bean>

    <bean id="historyCleanJob" class="com.armedia.acm.plugins.admin.service.HistoryCleanService">
        <property name="auditDao" ref="auditDao"/>
        <property name="notificationDao" ref="notificationDao"/>
        <property name="executeSolrQuery" ref="executeSolrQuery"/>
        <property name="applicationConfig" ref="applicationProperties"/>
    </bean>

    <bean id="cleanHistoryJobDescriptor" class="com.armedia.acm.plugins.admin.service.CleanHistoryJobDescriptor" parent="acmJobDescriptor">
        <property name="historyCleanService" ref="historyCleanJob"/>
    </bean>

    <bean id="cmisConfigurationService" class="com.armedia.acm.plugins.admin.service.CmisConfigurationService">
        <property name="encryptablePropertyUtils" ref="acmEncryptablePropertyUtils"/>
        <property name="cmisConfigurationTemplatesLocation" value="${user.home}/.arkcase/acm/cmis/cmis-config-templates/"/>
        <property name="cmisTemplatePropertiesFile" value="camel-config-cmis.properties.ftl"/>
        <property name="cmisConfigurationLocation" value="${user.home}/.arkcase/acm/cmis/"/>
        <property name="cmisPropertiesFile" value="camel-config-%s-cmis.properties"/>
        <property name="cmisIdPattern" ref="cmisIdPattern"/>
        <property name="cmisPropertiesPattern" ref="cmisPropertiesPattern"/>
        <property name="camelContextManager" ref="camelContextManager"/>
    </bean>

    <bean id="cmisPropertiesPattern" class="java.util.regex.Pattern" factory-method="compile">
        <constructor-arg value="^camel[-d]config[-d][a-zA-Z0-9]+[-d]cmis.properties$"/>
    </bean>
    <bean id="cmisIdPattern" class="java.util.regex.Pattern" factory-method="compile">
        <constructor-arg value="^[a-zA-Z0-9.]+$"/>
    </bean>

    <bean id="cmisConfigurationPropertiesService" class="com.armedia.acm.plugins.admin.service.CmisConfigurationPropertiesService">
        <property name="cmisConfigurationService" ref="cmisConfigurationService"/>
        <property name="propertyNamesForIntegerValues">
            <list value-type="java.lang.String">
                <value>cmis.maxIdle</value>
                <value>cmis.maxActive</value>
                <value>cmis.maxWait</value>
                <value>cmis.Count</value>
                <value>cmis.reconnectFrequency</value>
                <value>cmis.minEvictionMillis</value>
                <value>cmis.reconnectCount</value>
                <value>cmis.evictionCheckIntervalMillis</value>
            </list>
        </property>
    </bean>

    <bean id="pdfConversionConfigurationService" class="com.armedia.acm.plugins.admin.service.PDFConversionConfigurationService">
        <property name="pdfConversionConfig" ref="pdfConversionConfig"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
    </bean>

    <bean id="documentUploadPolicyConfigurationService" class="com.armedia.acm.plugins.admin.service.DocumentUploadPolicyConfigurationService">
        <property name="documentUploadPolicyConfig" ref="documentUploadPolicyConfig"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
    </bean>

    <bean id="outgoingIncomingEmailConversionConfigurationService" class="com.armedia.acm.plugins.admin.service.OutgoingIncomingEmailConversionConfigurationService">
        <property name="outgoingIncomingEmailConversionConfig" ref="outgoingIncomingEmailConversionConfig"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
    </bean>

    <bean id="pdfConversionConfig" class="com.armedia.acm.plugins.admin.model.PdfConversionConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="documentUploadPolicyConfig" class="com.armedia.acm.plugins.admin.model.DocumentUploadPolicyConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="outgoingIncomingEmailConversionConfig" class="com.armedia.acm.plugins.admin.model.OutgoingIncomingEmailConversionConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="googleAnalyticsConfig" class="com.armedia.acm.plugins.admin.model.GoogleAnalyticsConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="applicationPropertiesManagementService" class="com.armedia.acm.plugins.admin.service.ApplicationPropertiesManagementService">
        <property name="confApplicationConfig" ref="applicationProperties"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
    </bean>

</beans>
