<?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:util="http://www.springframework.org/schema/util"
    xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <!-- メッセージアクセサ -->
	<bean id="msgAcc"
		class="jp.terasoluna.fw.batch.message.MessageAccessorImpl" />

    <!-- メッセージプロパティファイル設定-->  
    <bean id="messageSource" 
          class="org.springframework.context.support.ResourceBundleMessageSource">
      <property name="basenames" value="messages"/>
    </bean>

	<!-- ファイル操作ユーティリティ -->
	<bean id="fileControl"
		class="jp.terasoluna.fw.file.util.FileControlImpl">
		<!-- 生成されたファイルは常に上書きする。 -->
		<property name="checkFileExist" value="true"/>
	</bean>

	<!-- CSVファイルアクセス用（入力）DAO -->
	<bean id="csvFileQueryDAO"
		class="jp.terasoluna.fw.file.dao.standard.CSVFileQueryDAO"
		parent="fileQueryDAO" />

	<!-- 固定長ファイルアクセス用（入力）DAO -->
	<bean id="fixedFileQueryDAO"
		class="jp.terasoluna.fw.file.dao.standard.FixedFileQueryDAO"
		parent="fileQueryDAO" />

	<!-- 可変長ファイルアクセス用（入力）DAO -->
	<bean id="variableFileQueryDAO"
		class="jp.terasoluna.fw.file.dao.standard.VariableFileQueryDAO"
		parent="fileQueryDAO" />

	<!-- その他ファイルアクセス用（入力）DAO -->
	<bean id="plainFileQueryDAO"
		class="jp.terasoluna.fw.file.dao.standard.PlainFileQueryDAO"
		parent="fileQueryDAO" />

	<!-- ファイルアクセス用（入力）DAO 共通定義 -->
	<bean id="fileQueryDAO"
		class="jp.terasoluna.fw.file.dao.standard.AbstractFileQueryDAO"
		abstract="true">
		<property name="columnParserMap" ref="columnParserMap" />
	</bean>

	<!-- CSVファイルアクセス用（出力）DAO -->
	<bean id="csvFileUpdateDAO"
		class="jp.terasoluna.fw.file.dao.standard.CSVFileUpdateDAO"
		parent="fileUpdateDAO" />

	<!-- 固定長ファイルアクセス用（出力）DAO -->
	<bean id="fixedFileUpdateDAO"
		class="jp.terasoluna.fw.file.dao.standard.FixedFileUpdateDAO"
		parent="fileUpdateDAO" />

	<!-- 可変長ファイルアクセス用（出力）DAO -->
	<bean id="variableFileUpdateDAO"
		class="jp.terasoluna.fw.file.dao.standard.VariableFileUpdateDAO"
		parent="fileUpdateDAO" />

	<!-- その他ファイルアクセス用（出力）DAO -->
	<bean id="plainFileUpdateDAO"
		class="jp.terasoluna.fw.file.dao.standard.PlainFileUpdateDAO"
		parent="fileUpdateDAO" />

	<!-- ファイルアクセス用（出力）DAO 共通定義 -->
	<bean id="fileUpdateDAO"
		class="jp.terasoluna.fw.file.dao.standard.AbstractFileUpdateDAO"
		abstract="true" scope="prototype">
		<property name="columnFormatterMap" ref="columnFormatterMap" />
	</bean>

	<!-- ファイルアクセス用（入力）パーサーMap -->
	<util:map id="columnParserMap">
		<entry key="java.lang.String">
			<bean
				class="jp.terasoluna.fw.file.dao.standard.NullColumnParser" />
		</entry>
		<entry key="java.util.Date">
			<bean
				class="jp.terasoluna.fw.file.dao.standard.DateColumnParser" />
		</entry>
		<entry key="java.math.BigDecimal">
			<bean
				class="jp.terasoluna.fw.file.dao.standard.DecimalColumnParser" />
		</entry>
		<entry key="int">
			<bean
				class="jp.terasoluna.fw.file.dao.standard.IntColumnParser" />
		</entry>
	</util:map>

	<!-- ファイルアクセス用（出力）フォーマッターMap -->
	<util:map id="columnFormatterMap">
		<entry key="java.lang.String">
			<bean class="jp.terasoluna.fw.file.dao.standard.NullColumnFormatter" />
		</entry>
		<entry key="java.util.Date">
			<bean class="jp.terasoluna.fw.file.dao.standard.DateColumnFormatter" />
		</entry>
		<entry key="java.math.BigDecimal">
			<bean class="jp.terasoluna.fw.file.dao.standard.DecimalColumnFormatter" />
		</entry>
		<entry key="int">
			<bean class="jp.terasoluna.fw.file.dao.standard.IntColumnFormatter" />
		</entry>
	</util:map>

    <!-- バッチ実行用スレッドプールタスクエグゼキュータ -->
    <bean id="batchTaskExecutor" 
        class="jp.terasoluna.fw.batch.executor.concurrent.BatchThreadPoolTaskExecutor">
        <property name="corePoolSize" value="1" />
        <property name="maxPoolSize" value="2" />
    </bean>

    <!-- スレッド実行用Runnableクラス（scopeは必ずprototypeにすること） -->
    <bean id="batchServant" scope="prototype"
          class="jp.terasoluna.fw.batch.executor.concurrent.BatchServantImpl">
    </bean>

</beans>