/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCCGetMailHeaderUtil
*   ソースファイル名：JCCGetMailHeaderUtil.java
*   作成者          ：富士通
*   日付            ：2011年06月13日
*＜機能概要＞
*   メール受信テーブルから取得されるメールヘッダー情報をHashMap形式に変換します。
*＜修正履歴＞
*   バージョン	修正日		修正者		修正内容
*   v1.00.00	2011/06/13	富士通		新規作成
*   v1.00.01	2011/08/09	富士通		postFixで生成されたメールヘッダリストを処理するメソッドを追加
*
**********************************************************************/

package eo.common.util;

import java.util.HashMap;

/**
 * メール受信テーブルから取得されるメールヘッダー情報をHashMap形式
 * に変換します。
 * 
 * @author 富士通
 */
public class JCCGetMailHeaderUtil
{	
	
	/** キーと値を分割する文字 */
	private static final String SEPARATE_COLON =  ":";
	
	/** v1.00.01 空白文字 */
	private static final String SPACE_CD =  " ";
	
	/**
	 * メールヘッダー情報をStringからHashMapへ変換
	 * @param mailHeader メール受信テーブルから取得するメールヘッダー情報の文字列
	 * @return HashMap形式に変換されたメールヘッダー情報
	 */
	public static HashMap<String, String> getMailHeader(String mailHeader)
	{
		if(mailHeader != null)
		{
			HashMap<String, String> map = new HashMap<String, String>();
			String[] splitMailHeader = mailHeader.split(System.getProperty("line.separator"));
			
			// 20130606 メールヘッダに改行があった場合の対応 Fst)Yanagihara start
			String beforeKey = "";
			// 20130606 メールヘッダに改行があった場合の対応 Fst)Yanagihara end

			// 改行ぶんループ処理
			for(int i = 0 ; i < splitMailHeader.length ; i++)
			{
				String header = splitMailHeader[i];
				
				// 20130606 メールヘッダに改行があった場合の対応 Fst)Yanagihara start
				if(header.length() > 0)
				{
					if(header.startsWith(" ") || header.startsWith("\t") || header.startsWith("\\"))
					{
						String beforeValue = map.get(beforeKey);
						map.put(beforeKey, beforeValue + header);
						continue;
					}
				}
				// 20130606 メールヘッダに改行があった場合の対応 Fst)Yanagihara end
				
				if(header.indexOf(SEPARATE_COLON) == -1)
				{
					continue;
				}
				String key = header.substring(0, header.indexOf(SEPARATE_COLON));
				String value = header.substring(header.indexOf(SEPARATE_COLON) + 1 );
				map.put(key, value);
				
				// 20130606 メールヘッダに改行があった場合の対応 Fst)Yanagihara start
				beforeKey = key;
				// 20130606 メールヘッダに改行があった場合の対応 Fst)Yanagihara end
			}
			return map;
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * v1.00.01 追加
	 * postFixで生成されたメールヘッダー情報をString[]からHashMapへ変換
	 * @param mailHeaderList postFixで生成されたメールヘッダ情報のリスト
	 * @return HashMap形式に変換されたメールヘッダー情報
	 */
	public static HashMap<String, String> getMailHeaderPostFix(String[] mailHeaderList)
	{
		if(null != mailHeaderList)
		{
			// 配列で指定されたヘッダー情報を連結する
			StringBuffer buf = new StringBuffer();
			for(int i = 0; i < mailHeaderList.length; i++)
			{
				// 20130606 メールヘッダに改行があった場合の対応 Fst)Yanagihara start
				//buf.append(mailHeaderList[i] + SPACE_CD);
				buf.append(mailHeaderList[i]);
				if(i != mailHeaderList.length-1)
				{
					buf.append(SPACE_CD);
				}
				// 20130606 メールヘッダに改行があった場合の対応 Fst)Yanagihara end
			}
			if("\r\n".equals(System.getProperty("line.separator")))
			{
				return getMailHeader(buf.toString().replace("\\r" + "\\n", System.getProperty("line.separator")));
			}
			else
			{
				return getMailHeader(buf.toString().replace("\\n", System.getProperty("line.separator")));
			}
		}
		else
		{
			return null;
		}
	}
}
