/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：契約新規システム
*   ソースファイル名：JKKCommonUtil.java
*   作成者          ：富士通
*   日付            ：2012年04月19日
*＜機能概要＞
*   契約新規システムの共通処理クラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v3.00       2012/04/19   FJ)三浦     新規作成
*   v51.00.00	2020/09/03	 FJ) 西窪	【ANK-3885-00-00】光化マンションの自動設計対応
*   v52.00.00   2021/01/28   FJ)三原     【ANK-3987-00-00】Netflix導入対応(STEP2)
*
**********************************************************************/
package eo.common.util;

import java.util.Arrays;

import javax.xml.bind.DatatypeConverter;

/**
 * 契約新規システム共通処理
 * <BR>
 * @author 富士通
 */
public class JKKCommonUtil extends JPCUtilCommon
{
	/** 全角マイナスのSJIS文字コード */
	public static final String MINUSFULLCHAR = "817C";
	// ANK-3987-00-00 ADD START
	/** 携帯電話番号の桁数 */
	private static final int CELL_PHONE_NO_LENGTH = 11;
	/** 携帯電話番号の1〜3桁目の値 */
	private static final String[] CELL_PHONE_NO_1_3 = {"090","080","070"};
	/** 携帯電話番号の4桁目の値 */
	private static final String[] CELL_PHONE_NO_4 = {"1","2","3","4","5","6","7","8","9"};
	/** 国際電話番号の接頭文字列 */
	private static final String INTERNATIONAL_TELNO_INI = "+81";
	// ANK-3987-00-00 ADD END
	
	/**
	 * オブジェクトに値が設定されているか判定します。
	 * <br>
	 * @param obj 判定するオブジェクト
	 * @return オブジェクトに値が設定されていない場合はtrue
	 */
	public static boolean isNull(Object obj)
	{
		return JPCCommonUtil.isNull(obj);
	}
	
	/**
	 * 全角文字を半角文字に変換します。
	 * <br>
	 * @param str 変換する文字列
	 * @return 半角に変換した文字列
	 */
	public static String convertHalf(String str)
	{
		return JKKStringConverter.convertHalf(str);
	}
	
	/**
	 * エンコードにSJISを指定してバイト数のチェックを行います。
	 * <br>
	 * @param str チェック対象の文字列
	 * @param limit 上限値
	 * @return boolean 判定結果
	 *                    上限値以内の場合、true
	 * @throws Exception 
	 */
	public static boolean isByteSJIS(String str, int limit) throws Exception
	{
		return JKKByteArrayConverter.isByteSJIS(str, limit);
	}
	
	// ANK-3885-00-00 ADD START
	/**
	 * 引数の値が全角マイナスかどうかをSJISの文字コードに変換して判定します。
	 * <br>
	 * @param str チェック対象の文字列
	 * @return boolean 判定結果
	 * @throws Exception 
	 */
	public static boolean judgeMinusFullChar(String str) throws Exception
	{
		
		byte[] fileByte = new byte[0];
		String hexBinary = "";
		
		if(str != null && str.length() == 1){
			fileByte = str.getBytes("MS932");
			hexBinary = DatatypeConverter.printHexBinary(fileByte);
			if(MINUSFULLCHAR.equals(hexBinary)){
				return true;
			}
		}
		return false;

	}
	// ANK-3885-00-00 ADD END
	
	// ANK-3987-00-00 ADD START
	/**
	 * 電話番号が携帯電話番号であるか判定します。
	 * <br>
	 * @param telno 電話番号
	 * @return boolean 判定結果
	 * @throws Exception 
	 */
	public static boolean judgeKeitaiTelno(String telno) throws Exception
	{
		// 電話番号がnullではない、かつ、""(空文字)ではない場合
		if (telno != null && !"".equals(telno))
		{
			// 電話番号が11桁ではない場合
			if (CELL_PHONE_NO_LENGTH != (telno.length()))
			{
				// 携帯電話番号ではないためfalseを返却する
				return false;
			}
			// 電話番号が11桁の場合
			else
			{
				// 電話番号の1〜3桁目が"090","080","070"のいずれでもない場合
				if (!Arrays.asList(CELL_PHONE_NO_1_3).contains(telno.substring(0, 3)))
				{
					// 携帯電話番号ではないためfalseを返却する
					return false;
				}
				else
				{
					// 電話番号の4桁目が"1"〜"9"のいずれでもない場合
					if (!Arrays.asList(CELL_PHONE_NO_4).contains(telno.substring(3, 4)))
					{
						// 携帯電話番号ではないためfalseを返却する
						return false;
					}
					else
					{
						// 携帯電話番号のためtrueを返却する
						return true;
					}
				}
			}
		}
		else
		{
			// 判定できないためfalseを返却する
			return false;
		}
	}
	
	/**
	 * 携帯電話番号を国際電話番号に変換します。
	 * <br>
	 * @param telno 電話番号
	 * @return internationalTelno 国際電話番号
	 * @throws Exception 
	 */
	public static String changeInternationalTelno(String telno) throws Exception
	{
		// 電話番号が携帯電話番号の場合
		if (judgeKeitaiTelno(telno))
		{
			// 電話番号の先頭1文字を除去する
			String internationalTelno = telno.substring(1);
			
			// "+81"を電話番号の先頭につける
			internationalTelno = INTERNATIONAL_TELNO_INI + internationalTelno;
			
			// 編集した電話番号を返却する
			return internationalTelno;
		}
		else
		{
			// 値を空にして返却する
			return "";
		}
	}
	// ANK-3987-00-00 ADD END
}
