/*
 * 作成日: 2006/04/27
 *
 * ｉｍｏｄｅ用ユーティリティクラス
 */
package jp.co.ntt.lms.imode.common;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.List;

/**
 * 
 * ｉｍｏｄｅ用ユーティリティクラス
 * 
 * @author ntc-sakai
 */
public class MobileUtl {
	/* １時間の秒数 */
	private static final long C_ONE_HOUR   = (60L * 60L);

	/* １分の秒数 */
	private static final long C_ONE_MINUTE = 60L;

	/* １ミリSEC */
	private static final long C_ONE_MSEC = 1000L;

	/**
	 * numericチェックをします。
	 * 
	 * @param strValue チェックする文字列
	 * @return 数字ならば true 数字以外は false
	 */
	public static boolean isDigits(String strValue) {

		if (isEmpty(strValue)) {
			return false;
		}

		for (int i = 0; i < strValue.length(); i++) {
			if (!Character.isDigit(strValue.charAt(i))) {
				return false;
			}
		}

		return true;
	}

	/**
	 * null又は""かチェックをします。
	 * 
	 * @param strValue チェックする文字列
	 * @return strValueがnull又は""であればtrueそれ以外はfalse
	 */
	public static boolean isEmpty(String strValue) {
		if (strValue == null || strValue.length() == 0) {
			return true;
		}
		return false;
	}

	/**
	 * ファイルを読み込みます。<br>
	 * 入力時SJISにencodeします。
	 * 
	 * @param FilePath ディレクトリ＋ファイル名
	 * @return 読み込んだデータ<br> 
	 *          FilePathで指定したファイルが読み込めない場合、null
	 */
	public static String readFile(String FilePath) {

		String fileBuffer = null;

		try {
			File readFile = new File(FilePath);

			if (readFile.isFile()) {
				// ファイルが存在した場合、ファイル入力
				fileBuffer = readFile(readFile);
			}
		} catch (Exception e) {
		}

		return fileBuffer;
	}

	/**
	 * ファイルを読み込みます。<br>
	 * 入力時SJISにencodeします。
	 * 
	 * @param file 入力するFile
	 * @return 読み込んだデータ
	 * @throws Exception ファイル読み込み時エラー
	 */
	public static String readFile(File file) throws Exception{
		InputStreamReader fr = new InputStreamReader(new FileInputStream(file), "SJIS"); 
		BufferedReader br = new BufferedReader(fr);
		
		StringBuffer sb = new StringBuffer();
		String line;
		while((line = br.readLine()) != null){
			sb.append(line);
			sb.append("\n");
		}
		fr.close();
		br.close();
		return sb.toString();
	}

	/**
	 * listの要素をカンマ編集します。<br>
	 * listがnullであれば""を返します。<br>
	 * listの要素数が１の場合は、カンマは付加されません。<br>
	 * <pre>
	 * 例)
	 *  list.add("aaa"); list.add("bbb"); list.add("ccc");
	 *  String "aaa,bbb,ccc"になります。
	 * </pre>
	 * @param list カンマ編集前list
	 * @return カンマ編集後の文字列
	 */
	public static String listToComma(List list) {
		StringBuffer sb = new StringBuffer();
	
		if (list == null) {
			return "";
		}
	
		// リストの要素を取り出してカンマ編集する
		for(int i = 0; i < list.size(); i++) {
			if ( i > 0){
				sb.append(",");
			}
			sb.append(list.get(i));
		}

		return sb.toString();
	}


	/**
	 * startTimeからendTimeの経過時間を計算します。<br>
	 * 
	 * @param startTime 開始日時 timeミリ秒 
	 * @param endTime 終了日時 timeミリ秒
	 * @return 経過時間をPT[hhH][mmM]ssSのフォーマット<br>
	 *          startTime > endTimeの場合は、""
	 */
	public static String diffTime(long startTime, long endTime) {

		StringBuffer strTime = new StringBuffer();

		if (startTime > endTime) {
			return "";
		}

		// ミリ秒から秒に変換
		long startSec = startTime / C_ONE_MSEC;
		long endSec   = endTime   / C_ONE_MSEC;

		// 経過時間算出（時）
		long hour = (endSec - startSec) / C_ONE_HOUR;

		// 経過時間算出（分）
		long min = (endSec - startSec - (hour * C_ONE_HOUR)) / C_ONE_MINUTE;

		// 経過時間算出（秒）
		long sec = (endSec - startSec - (hour * C_ONE_HOUR) - (min * C_ONE_MINUTE));

		strTime.append("PT");

		if (hour > 0) {
			strTime.append(hour);
			strTime.append("H");
			strTime.append(min);
			strTime.append("M");
		} else if (min > 0) {
			strTime.append(min);
			strTime.append("M");
		}

		strTime.append(sec);
		strTime.append("S");

		return strTime.toString();
	}

}