<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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="acmConfigPlugin" class="com.armedia.acm.pluginmanager.model.AcmPlugin">
        <property name="pluginName" value="Config Service Plugin"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
    </bean>

    <bean id="configService" class="com.armedia.acm.services.config.service.ConfigService">
        <property name="configList" ref="configList"/>
    </bean>

    <bean id="lookupDao" class="com.armedia.acm.services.config.lookups.service.ConfigLookupDao">
        <property name="objectConverter" ref="objectConverter"/>
        <property name="configurationPropertyService" ref="configurationPropertyService"/>
        <property name="lookupConfig" ref="lookupsConfiguration"/>
        <property name="propertiesConfigurationService" ref="collectionPropertiesConfigurationService"/>
    </bean>

    <bean id="lookupsUpdatedListener" class="com.armedia.acm.services.config.lookups.service.LookupsUpdatedListener">
        <property name="lookupDao" ref="lookupDao"/>
        <property name="configurationUpdatedChannel" ref="configurationUpdatedChannel"/>
    </bean>

    <bean id="objectTypesJsonConfig" class="org.apache.commons.io.IOUtils" factory-method="toString">
        <constructor-arg type="java.io.InputStream">
            <bean class="java.io.FileInputStream" destroy-method="close">
                <constructor-arg type="java.io.File" value="${user.home}/.arkcase/acm/lookups/objectTypes.json"/>
            </bean>
        </constructor-arg>
        <constructor-arg value="UTF-8"/>
    </bean>

    <bean id="localeSettingsJson" class="org.apache.commons.io.IOUtils" factory-method="toString">
        <constructor-arg type="java.io.InputStream">
            <bean class="java.io.FileInputStream" destroy-method="close">
                <constructor-arg type="java.io.File" value="${user.home}/.arkcase/acm/lookups/localeSettings.json"/>
            </bean>
        </constructor-arg>
        <constructor-arg value="UTF-8"/>
    </bean>

    <bean id="lookupsConfiguration" class="com.armedia.acm.services.config.lookups.model.AcmLookupConfig" scope="refresh">
        <aop:scoped-proxy/>
    </bean>

    <bean id="configList" class="java.util.ArrayList">
        <constructor-arg>
            <list>
                <bean class="com.armedia.acm.services.config.model.AppConfig">
                    <property name="configName" value="app"/>
                    <property name="configDescription" value="App"/>
                    <property name="acmApplication" ref="acmApplication"/>
                    <property name="objectConverter" ref="objectConverter"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="alfrescoRma"/>
                    <property name="description" value="Alfresco rma"/>
                    <property name="config" ref="rmaConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigMap" scope="refresh">
                    <property name="configName" value="applicationRoleToUserGroup"/>
                    <property name="description" value="Application Role To User Group"/>
                    <property name="configMapping" value="#{rolesToGroupsConfig.getRolesToGroups()}"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                    <aop:scoped-proxy/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="audit"/>
                    <property name="description" value="Audit"/>
                    <property name="config" ref="auditConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="caseFile"/>
                    <property name="description" value="Case File"/>
                    <property name="config" ref="caseConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="complaint"/>
                    <property name="description" value="Complaint"/>
                    <property name="config" ref="complaintConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="cost"/>
                    <property name="description" value="Cost"/>
                    <property name="config" ref="costsheetConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="dacService"/>
                    <property name="description" value="Dac Service"/>
                    <property name="config" ref="dacConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="dashboard"/>
                    <property name="description" value="Dashboard"/>
                    <property name="config" ref="dashboardConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="datasource"/>
                    <property name="description" value="Data Source"/>
                    <property name="config" ref="dataSourceConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="ecmFileService"/>
                    <property name="description" value="Ecm File Service"/>
                    <property name="config" ref="ecmFileConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigMap" scope="refresh">
                    <property name="configName" value="eventType"/>
                    <property name="description" value="Event Type"/>
                    <property name="configMapping" value="#{auditEventConfig.getEventTypes()}"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                    <aop:scoped-proxy/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="msOutlookIntegration"/>
                    <property name="description" value="MS Outlook Integration"/>
                    <property name="config" ref="outlookConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="notification"/>
                    <property name="description" value="Notification"/>
                    <property name="config" ref="notificationConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="profile"/>
                    <property name="description" value="Profile"/>
                    <property name="config" ref="profileConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigMap" scope="refresh">
                    <property name="configName" value="acm-reports"/>
                    <property name="description" value="Acm Reports"/>
                    <property name="configMapping" value="#{pentahoReportsConfig.getReports()}"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                    <aop:scoped-proxy/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="reportsParameters"/>
                    <property name="description" value="Reports parameters"/>
                    <property name="config" ref="reportsParametersConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="acm-reports-server-config"/>
                    <property name="description" value="Acm Reports Server config"/>
                    <property name="config" ref="pentahoReportsConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigMap" scope="refresh">
                    <property name="configName" value="reportToRolesMap"/>
                    <property name="description" value="Reports to Roles map"/>
                    <property name="configMapping" value="#{reportsToRolesConfig.getReportsToRolesMap()}"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                    <aop:scoped-proxy/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="acm-roles"/>
                    <property name="description" value="Acm Roles"/>
                    <property name="config" ref="applicationRolesConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="search"/>
                    <property name="description" value="Search"/>
                    <property name="config" ref="solrConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="solr"/>
                    <property name="description" value="Solr"/>
                    <property name="config" ref="solrConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="subscription"/>
                    <property name="description" value="Subscription"/>
                    <property name="config" ref="subscriptionConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="tag"/>
                    <property name="description" value="Tag"/>
                    <property name="config" ref="tagConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="task"/>
                    <property name="description" value="Task"/>
                    <property name="config" ref="taskConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="time"/>
                    <property name="description" value="Time"/>
                    <property name="config" ref="timesheetConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="activiti"/>
                    <property name="description" value="Activiti BPMN properties"/>
                    <property name="config" ref="activitiConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="acm-analytics-config"/>
                    <property name="description" value="Acm ELK/SILK Analytics Server config"/>
                    <property name="config" ref="analyticsServerConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.JsonConfig">
                    <property name="configName" value="objectTypes"/>
                    <property name="configDescription" value="Object Types"/>
                    <property name="json" ref="objectTypesJsonConfig"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.JsonConfig">
                    <property name="configName" value="localeSettings"/>
                    <property name="configDescription" value="Locale Setting"/>
                    <property name="json" ref="localeSettingsJson"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="languageSettings"/>
                    <property name="description" value="Language Setting"/>
                    <property name="config" ref="languageSettingsConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.ConfigBean">
                    <property name="configName" value="fiscalYear"/>
                    <property name="description" value="Fiscal year definition"/>
                    <property name="config" ref="fiscalYearConfig"/>
                    <property name="jsonMarshaller" ref="jsonMarshaller"/>
                </bean>
                <bean class="com.armedia.acm.services.config.model.PropertyConfig">
                    <property name="configName" value="acm-forms"/>
                    <property name="configDescription" value="Acm Forms"/>
                    <property name="properties" ref="acm-forms-properties"/>
                    <property name="encryptablePropertyUtils" ref="acmEncryptablePropertyUtils"/>
                    <property name="objectConverter" ref="objectConverter"/>
                </bean>
            </list>
        </constructor-arg>
    </bean>
</beans>
