<?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="userHomeFolder" class="java.io.File">
        <constructor-arg value="${user.home}/.arkcase"/>
    </bean>

    <bean id="vfsManager" class="org.apache.commons.vfs2.VFS" factory-method="getManager"/>

    <!-- Configuration File -->
    <bean id="configFolder" factory-bean="vfsManager" factory-method="resolveFile">
        <constructor-arg index="0" ref="userHomeFolder"/>
        <constructor-arg index="1" value="acm"/>
    </bean>

    <bean id="configFileListener" class="com.armedia.acm.files.ConfigFileWatcher" depends-on="springEntityListenerConfigurer">
        <property name="baseFolder" ref="configFolder"/>
        <property name="ignoreFolders">
            <list>
                <value>${file.separator}activemq</value>
                <value>${file.separator}activiti${file.separator}/versions</value>
                <value>${file.separator}tmp</value>
                <value>${file.separator}custom</value>
            </list>
        </property>
    </bean>

    <bean id="configFileMonitor" class="org.apache.commons.vfs2.impl.DefaultFileMonitor">
        <constructor-arg ref="configFileListener"/>
        <property name="recursive" value="true"/>
        <!--<property name="delay" value="3000"/>-->
    </bean>

    <bean id="configMonitorController" class="com.armedia.acm.files.ConfigFileController" init-method="initBean" destroy-method="stopBean"
          depends-on="activitiProcessEngineConfiguration">
        <property name="configFolder" ref="configFolder"/>
        <property name="configFolderMonitor" ref="configFileMonitor"/>
    </bean>

    <!-- Capture File -->
    <bean id="captureFolder" factory-bean="vfsManager" factory-method="resolveFile">
        <constructor-arg index="0" value="#{captureConfig.rootFolderToWatch}"/>
    </bean>

    <bean id="captureFileListener" class="com.armedia.acm.files.FileWatcher" depends-on="springEntityListenerConfigurer">
        <property name="watchFolder" ref="captureFolder"/>
        <!-- Do not put a period before the extension -->
        <property name="allowedFileExtensions" value="#{captureConfig.fileExtension}"/>
        <property name="type" value="CAPTURE"/>
    </bean>

    <bean id="captureFileMonitor" class="org.apache.commons.vfs2.impl.DefaultFileMonitor">
        <constructor-arg ref="captureFileListener"/>
        <property name="recursive" value="true"/>
        <!--<property name="delay" value="3000"/>-->
    </bean>

    <bean id="captureMonitorController" class="com.armedia.acm.files.FileController" init-method="init" destroy-method="destroy">
        <property name="watchFolder" ref="captureFolder"/>
        <property name="fileMonitor" ref="captureFileMonitor"/>
    </bean>

    <!-- Converted Folder -->
    <bean id="convertedFilesFolder" factory-bean="vfsManager" factory-method="resolveFile">
        <constructor-arg index="0" value="#{captureConfig.convertedPdfsFolder}"/>
    </bean>

    <bean id="convertedFileListener" class="com.armedia.acm.files.capture.ConvertedFileWatcher" depends-on="springEntityListenerConfigurer">
        <property name="baseFolder" ref="convertedFilesFolder"/>
        <!-- since is called convertedPdfsFolder is logical that only pdf will need to be processed-->
        <property name="fileExtensions" value="pdf"/>
    </bean>

    <bean id="convertedFileMonitor" class="org.apache.commons.vfs2.impl.DefaultFileMonitor">
        <constructor-arg ref="convertedFileListener"/>
        <property name="recursive" value="true"/>
        <!--<property name="delay" value="3000"/>-->
    </bean>

    <bean id="convertedMonitorController" class="com.armedia.acm.files.capture.ConvertedFileController" init-method="initBean"
          destroy-method="stopBean">
        <property name="convertedFolder" ref="convertedFilesFolder"/>
        <property name="convertedFileMonitor" ref="convertedFileMonitor"/>
    </bean>

    <!-- Working Folder -->
    <bean id="workingFolder" factory-bean="vfsManager" factory-method="resolveFile">
        <constructor-arg index="0" value="#{captureConfig.workingFolder}"/>
    </bean>

    <!-- Completed Folder -->
    <bean id="completedFolder" factory-bean="vfsManager" factory-method="resolveFile">
        <constructor-arg index="0" value="#{captureConfig.completedFolder}"/>
    </bean>

    <!-- Error Folder -->
    <bean id="errorFolder" factory-bean="vfsManager" factory-method="resolveFile">
        <constructor-arg index="0" value="#{captureConfig.errorFolder}"/>
    </bean>

    <bean id="captureConfig" class="com.armedia.acm.files.capture.CaptureConfig">
        <aop:scoped-proxy/>
    </bean>
</beans>