/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：Futurity
*	モジュール名	：JBSbatCsvFileSyori
*	ソースファイル名：JBSbatCsvFileSyori.java
*	作成者			：富士通
*	日付			：2011年04月7日
*＜機能概要＞
*	対応履歴CSVファイル処理関連部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/02/28	富士通		新規作成
*
**********************************************************************/

package eo.business.common;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;

import eo.common.constant.JCRStrConst;
import eo.framework.item.JBSbatCommonItem;

/**
 * 対応履歴CSVファイル処理関連部品<p>
 * <BR>
 * @author 富士通
 */
public class JBSbatCRCsvFileSyori
{
	// 定数定義
	/** CSV囲い文字(ダブルクォーテーション) */
	private static final String KAKOIMOJI = "\"";

	/**
	 * CSVファイル変換処理<br>
	 * CSVの項目がダブルクォーテーションで囲まれていない文字列にも対応。
	 * @param commonItem 共通情報
	 * @param fileName 認証IDファイルパス
	 * @return 認証IDファイルデータリスト
	 * @throws Exception 例外
	 */
	static  List<List<String>> convNonQuateCsvFiletoList(JBSbatCommonItem commonItem, String fileName) throws Exception
	{

		List<List<String>> csvFileList = new ArrayList<List<String>>();

		// CSV指定ファイルパスチェック
		if (fileName == null || "".equals(fileName.trim()))
		{
			// エラーの場合空文字を返す。
			return null;
		}

		BufferedReader br = null;

		try
		{

			// CSV指定ファイル読込み
			br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(fileName)), JCRStrConst.DEFAULT_ENCODE));

			// CSVファイル一行読込み
			String lineData = br.readLine();

			while (lineData != null)
			{
				// リストに格納された一行分のファイルデータを格納
				List<String> workList = convNonQuateStringToList(commonItem, lineData);
				if (workList != null)
				{
					csvFileList.add(workList);
				}

				// CSVファイル一行読込み
				lineData = br.readLine();
			}

		}
		catch(IOException ioe)
		{
			// 例外処理
			return null;
		}
		finally
		{
			if (br != null)
			{
				try
				{
					br.close();
				}
				catch (IOException ioe)
				{
					// 例外処理
					csvFileList = null;
				}
			}
		}

		return csvFileList;
	}

	/**
	 * 引数で指定されたCSVファイルの一行データを文字列リスト変換処理に渡し
	 * 処理結果を呼出し元に返す。
	 * ダブルクォーテーションで囲まれている場合は、削除した文字列に変換する。
	 * @param commonItem 共通情報
	 * @param lineData 一行分のCSVデータ
	 * @return List<String> 項目ごとにCSVデータを格納したList
	 * @throws Exception 例外
	 **/
	static List<String> convNonQuateStringToList(JBSbatCommonItem commonItem, String lineData) throws Exception
	{

		// CSV指定ファイル読込み
		// 戻り値格納用List
		List<String> resultList = new ArrayList<String>();

		try
		{
			String[] result = lineData.split(",");
			
			for (int i = 0; i < result.length; i++)
			{
				String colm = result[i];
	
				// 先頭 または 最後がダブルクォートの場合 
				if (colm.startsWith(KAKOIMOJI))
				{
					colm = colm.substring(1);
				}
				if (colm.endsWith(KAKOIMOJI))
				{
					colm = colm.substring(0, colm.length() - 1);
				}
				resultList.add(colm);
			}
		}
		catch (NoSuchElementException e)
		{
			// 例外処理
			commonItem.getLogPrint().printDebugLog("JBSbatCRCsvFileSyori.convNonQuateStringToList NoSuchElementException発生:");
			throw e;
		}

		// 1行分のデータを格納したListを返却
		return resultList;

	}

}
