/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbKK2091NumberParts
*	ソースファイル名：JKKejbKK2091NumberParts.java
*	作成者			：富士通
*	日付			：2011年11月17日
*＜機能概要＞
*	住所変更番号採番部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/17	富士通		新規作成
*
**********************************************************************/

package eo.ejb.common.edit;

import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.common.JCCModelCommon;

/**
 * <p>
 * SIPユーザID採番部品クラスです。
 * </p>
 * @author 富士通
 */
public class JCNejbCN0011NumberParts extends JKKejbNumberPartsBase
{
	/** 接頭語 */
	private static final String PREFIX = "";
	
	/** 桁数 */
	private static final int KETASUU = 8;

	/** シーケンス名：050番号SIPユーザID通番 */
	private static final String SEQ_NAME = "SEQ_050APL_SIP_USER_ID";

	/** 変換配列 */
	private static final HashMap<String, String> CHANGE_DATA = new HashMap<String, String>();
	static
	{
		// 変換配列設定
		CHANGE_DATA.put("0", "KMNPQRSTUV");
		CHANGE_DATA.put("1", "PQRSTUVWXY");
		CHANGE_DATA.put("2", "TUVWXYZABC");
		CHANGE_DATA.put("3", "IJKMNPQRST");
		CHANGE_DATA.put("4", "CDEFGHIJKM");
		CHANGE_DATA.put("5", "MNPQRSTUVW");
		CHANGE_DATA.put("6", "ABCDEFGHIJ");
		CHANGE_DATA.put("7", "STUVWXYZAB");
		CHANGE_DATA.put("8", "HIJKMNPQRS");
		CHANGE_DATA.put("9", "NPQRSTUVWX");
	}

	/**
	 * コンストラクタです。
	 */
	public JCNejbCN0011NumberParts()
	{
	}

	/**
	 * <p>
	 * SIPユーザIDの採番を行います。
	 * </p>
	 * @return 採番されたSIPユーザID
	 */
	public String getSipUserID()
	{

		// --------------------------------------
		// 採番処理
		// --------------------------------------
		String value = null;

		// シーケンス取得
		value = JCCModelCommon.getFormatedNextSeq(SEQ_NAME, PREFIX, KETASUU);
		
		// 変換処理
		StringBuffer buffer = new StringBuffer();
		buffer.append("H");

		// (a)シーケンスの2桁目,3桁目を英字に変換
		buffer.append(toAlphabet(value.substring(1, 2), value.substring(2, 3)));
		// (b)シーケンスの6桁目,7桁目を英字に変換
		buffer.append(toAlphabet(value.substring(5, 6), value.substring(6, 7)));
		// (-)シーケンスの5桁目
		buffer.append(value.substring(4, 5));
		// (-)シーケンスの6桁目
		buffer.append(value.substring(5, 6));
		// (c)シーケンスの1桁目,2桁目を英字に変換
		buffer.append(toAlphabet(value.substring(0, 1), value.substring(1, 2)));
		// (d)シーケンスの3桁目,4桁目を英字に変換
		buffer.append(toAlphabet(value.substring(2, 3), value.substring(3, 4)));
		// (-)シーケンスの7桁目
		buffer.append(value.substring(6, 7));
		// (-)シーケンスの8桁目
		buffer.append(value.substring(7, 8));
		
		// (10)設定された値からチェックデジットを算出して設定する
		buffer.append(getCheckDigit21(buffer.toString()));
		
		return buffer.toString();
	}

	/**
	 * 変換元データから1文字の英字を取得して返します。
	 * <BR>
	 * @param str1 変換元データの１桁目
	 * @param str2 変換元データの２桁目
	 * @return 取得した英字
	 */
	private String toAlphabet(String str1, String str2)
	{
		// 変換元データの１桁目から、英字変換対象行を取得
		String chgStr = CHANGE_DATA.get(str1);

		// 変換元データの２桁目から、変換した英字を取得して返す
		return chgStr.substring(Integer.valueOf(str2), Integer.valueOf(str2) + 1);
	}
	
}
