/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//LoLog使用定数定義
//
//		変更履歴
//			2005.01.31  新規作成  OGA
//
//	機能
//
//	LoLog使用定数定義と関数
//
/////////////////////////////////////////////////////////////////
/*
 * 作成日: 2005/02/21
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
package jp.co.ntt.lms.xmf.xmo.LoLog.inc;
import java.text.DecimalFormat;
import jp.co.ntt.lms.xmo.LoRelation.LoRelationClient;

/**
 * @author Administrator
 *
 * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
public class LoLogCommon_inc {

	///////////////////////////////////////////////////
	//画像ファイルファイルの定義
	///////////////////////////////////////////////////

	// 背景イメージ
	private final String IMG_BACK_GROUND_00_o = "sp.gif";

	// 左上イメージ
	private final String IMG_TOP_LEFT_00_o = "subp_hd.gif";

	// 共通ログメニューイメージ
	private final String IMG_LO_LOG_MENU_00_o = "ap_tit1_log.gif";

	// LO利用数一覧イメージ
	private final String IMG_MAT_ACCESS_LIST_00_o = "ap_tit1_log.gif";

	// LO別合格状況イメージ
	private final String IMG_MATERIAL_PASS_o = "ap_tit1_log.gif";

	// 学習状況（ユーザ一覧）イメージ
	private final String IMG_USER_LEARN_STATUS_o  = "ap_tit1_log.gif";

	// 学習状況（LO一覧）イメージ
	private final String IMG_MATERIAL_LEARN_STATUS_o  = "ap_tit1_log.gif";

	// 送信ボタンイメージ
	private final String IMG_SEND_BUT_00_o = "subp_bt_soushin.gif";

	// 検索ボタンイメージ
	private final String IMG_SEARCH_BUT_00_o = "subp_bt_search.gif";

	// CSV出力ボタンイメージ
	private final String IMG_CSV_BUT_00_o = "subp_bt_csv.gif";

	// 閉じるボタンイメージ
	private final String IMG_CLOSE_BUT_00_o = "bpft_close.jpg";

	// 下のイメージ1
	private final String IMG_DOWN_LOGO1_00_o = "bpft_1.gif";

	// 下のイメージ2
	private final String IMG_DOWN_LOGO2_00_o = "bpft_2.gif";

	//////////////////////////////////////////////////////
	// 初期値定義
	//////////////////////////////////////////////////////

	// 粒度
	private final String DEF_TERM_UNIT_o = "TERM_MONTH";

	// カウント対象初期値
	private final String DEF_COUNT_UNIT_o = "COUNT_USER";

	// 期間（日）
	private final String DEF_TERM_DAY_o = "62";

	// 合格状況
	private final String DEF_PASS_CONDITION_o = "other";

	// 日付型最小値
	private final String DEF_DATE_MIN_o = "1900/01/01";
	// 日付型最大値
	private final String DEF_DATE_MAX_o = "9999/12/31";
	// 回数最小値
	private final String DEF_COUNT_MIN_o = "0";
	// 回数最大値
	private final String DEF_COUNT_MAX_o = "9999";
	// パーセント最小値
	private final String DEF_PERCENT_MIN_o = "-32768";
	// パーセント最大値
	private final String DEF_PERCENT_MAX_o = "32768";
	// ミリ秒最小値
	private final String DEF_MS_MIN_o = "0";
	// ミリ秒最大値
	private final String DEF_MS_MAX_o = "999999999999999";
	// 時間最大
	private final String MAX_TIME = " 23:59:59";


	// 完了判定
	private final String DEF_COMPLETE_PASS_RES_o = "1";
	private final String DEF_COMPLETE_FAIL_RES_o = "0";
	private final int DEF_COMPLETE_PASS_o = 1;
	private final int DEF_COMPLETE_FAIL_o = 0;
	private final int DEF_COMPLETE_OTHER_o = -1;

	// 合格判定
	private final String DEF_PASS_PASS_RES_o = "1";
	private final String DEF_PASS_FAIL_RES_o = "0";
	private final int DEF_PASS_PASS_o = 1;
	private final int DEF_PASS_FAIL_o = 0;
	private final int DEF_PASS_OTHER_o = -1;

	// 粒度
	private final String DEF_DBTERM_YEAR = "year";
	private final String DEF_DBTERM_MONTH = "month";
	private final String DEF_DBTERM_WEEK = "week";
	private final String DEF_DBTERM_DATE = "date";

	// カウント対象
	private final String DEF_DBTARGET_USER = "user";
	private final String DEF_DBTARGET_ACCESS = "access";

	///////////////////////////////////////////////////
	// 変数定義
	///////////////////////////////////////////////////
	// 人
	private final String TYPE_PEOPLE_o = "user";

	// グループ
	private final String TYPE_GROUP_o = "group";

	// 教材
	private final String TYPE_MATERIAL_o = "material";

	// コンテナ
	private final String TYPE_CONTAINER_o = "container";

	// グループ／コンテナ　LO利用数一覧画面
	private final String LOG_GC01_o = "LOG0101";
	// グループ／コンテナ　LO別合格状況
	private final String LOG_GC02_o = "LOG0102";
	// グループ／コンテナ　学習状況（ユーザー一覧）
	private final String LOG_GC03_o = "LOG0103";
	// グループ／コンテナ　学習状況（LO一覧）
	private final String LOG_GC04_o = "LOG0104";
	// グループ／教材　LO利用数一覧画面
	private final String LOG_GM01_o = "LOG0201";
	// グループ／教材　LO別合格状況
	private final String LOG_GM02_o = "LOG0202";
	// グループ／教材　学習状況（ユーザー一覧）
	private final String LOG_GM03_o = "LOG0203";
	// グループ／教材　学習状況（LO一覧）
	private final String LOG_GM04_o = "LOG0204";
	// ユーザー／コンテナ　学習状況（ユーザー一覧）
	private final String LOG_UC01_o = "LOG0301";
	// ユーザー／コンテナ　学習状況（LO一覧）
	private final String LOG_UC02_o = "LOG0302";
	// ユーザー／教材　学習状況（LO一覧）
	private final String LOG_UM01_o = "LOG0401";

	///////////////////////////////////////////////////
	// 固定文字列の定義
	///////////////////////////////////////////////////

	// 共通ログメニュー
	private final String WIN_TITLE_LO_LOG_MENU_o = "共通ログメニュー";

	// 入力必須項目
	private final String STR_ESSENTIAL_ITEM_o = "*：入力必須項目";

	// 教材名
	private final String STR_MATERIALL_NAME_o = "教材名";

	// 計
	private final String STR_TOTAL_o = "計";

	// LO利用数一覧画面ウィンドウタイトル
	private final String WIN_TITLE_MAT_ACCESS_LOG_LIST_o = "LO利用数一覧";

	// 検索期間
	private final String STR_SERCH_TERM_o = "検索期間";

	// 期間
	private final String STR_TERM_o = "〜";
	// 年
	private final String STR_TERM_YEAR_o = "年";
	// 月
	private final String STR_TERM_MONTH_o = "月";
	// 週
	private final String STR_TERM_WEEK_o = "週";
	// 日
	private final String STR_TERM_DAY_o = "日";
	// ユーザ数
	private final String STR_COUNT_USER_o = "ユーザ数";
	// アクセス数
	private final String STR_COUNT_ACCESS_o = "アクセス数";

	// *
	private final String STR_ASTA_o = "*";

	// %
	private final String STR_PERCENT_o = "%";

	// 粒度
	private final String STR_TERM_UNIT_o = "粒度";

	// カウント対象
	private final String STR_COUNT_TARGET_o = "カウント対象";

	// 例 （期間）
	private final String STR_TERM_EXAMPLE_o = "&nbsp;例：<br>&nbsp;粒度が週または日： 2002/04/01 〜 2002/05/31<br>&nbsp;粒度が月： 2002/04 〜 2002/05<br>&nbsp;粒度が年： 2002〜2003";


	// 学習状況（ユーザ一覧）画面ウィンドウタイトル
	private final String WIN_TITLE_USER_LEARN_STATUS_o = "学習状況（ユーザ一覧）";

	// 学習開始
	private final String STR_CALC_START_o = "学習開始";

	// 修了
	private final String STR_CALC_END_o = "完了";

	// 学習開始日時
	private final String STR_DATE_START_o = "学習開始日時";

	// 以降
	private final String STR_AFTER_o = "以降";

	// 以前
	private final String STR_BEFORE_o = "以前";

	// 例 （日付）
	private final String STR_DATE_EXAMPLE_o = "（例： 2002/04/01）";

	// 最終アクセス日時
	private final String STR_DATE_LAST_o = "最終アクセス日時";

	// 総アクセス回数
	private final String STR_TOTAL_ACCESS_o = "総アクセス回数（回）";

	// 以上
	private final String STR_OVER_o = "以上";

	// 以下
	private final String STR_UNDER_o = "以下";

	// 累積滞在時間
	private final String STR_TOTAL_LEARN_TIME_o = "累積滞在時間（分）";

	// 完了LO数
	private final String STR_MAT_COMPLETE_o = "完了LO数(%)";

	// 合格LO数
	private final String STR_MAT_PASS_o = "合格LO数(%)";

	// 完了者数
	private final String STR_USER_COMPLETE_o = "完了者数(%)";

	// 合格者数
	private final String STR_USER_PASS_o = "合格者数(%)";

	// 合格状況
	private final String STR_CONDITION_PASS_o = "合格状況";

	// 完了
	private final String STR_COMPLETE_o = "完了";

	// 未完了
	private final String STR_INCOMPLETE_o = "未完了";

	// 合格
	private final String STR_PASS_o = "合格";

	// 未合格
	private final String STR_FAIL_o = "未合格";

	// 空フィールド
	private final String STR_EMPTY_FIELD = "---";

	// 対象外
	private final String STR_OTHER_o = "　";

	// 学習者
	private final String STR_USER_o = "学習者";

	// 激励メール送信
	private final String STR_CHEER_MAIL_o = "激励メール送信";

	// 最新得点
	private final String STR_S_NEWEST_SCORE_o =  "最新得点(%)";

	// 最高得点
	private final String STR_S_HIGH_SCORE_o =  "最高得点(%)";

	// 最新
	private final String STR_NEWEST_SCORE_o =  "最新";

	// 最高
	private final String STR_HIGH_SCORE_o  = "最高";

	// 得点
	private final String STR_SCORE_o = "得点";

	// 最新得点
	private final String STR_NEWEST_CSV_SCORE_o =  "最新得点";

	// 最高得点
	private final String STR_HIGH_CSV_SCORE_o  = "最高得点";

	// 完了
	private final String STR_COMPLETETITLE_o =  "完了";

	// 合格
	private final String STR_PASSTITLE_o =  "合格";

	// 合計
	private final String STR_SUM_o =  "合計";

	// 平均
	private final String STR_AVE_o  = "平均";

	// 詳細
	private final String STR_PROGRESS_MATERIALS_o  = "詳細";

	// 学習状況（LO一覧）画面ウィンドウタイトル
	private final String WIN_TITLE_MATERIAL_LEARN_STATUS_o = "学習状況（LO一覧）";

	// 完了者数
	private final String STR_COMPLETE_USERS_o  = "完了者数";

	// 合格者数
	private final String STR_PASS_USERS_o  = "合格者数";

	// 詳細
	private final String STR_PROGRESS_USERS_o  = "詳細";

	// LO別合格状況画面ウィンドウタイトル
	private final String WIN_TITLE_MATERIAL_PASS_o = "LO別合格状況";

	// 学習者数
	private final String STR_USER_COUNT_o = "学習者数：";

	// 人
	private final String STR_USER_UNIT_o = "人";

	// ブランク
	private final String STR_BLANK_o = "&nbsp;&nbsp;";

	///////////////////////////////////////////////////
	// メッセージの定義
	///////////////////////////////////////////////////

	// 検索期間指定エラー
	private final String MSG_TERM_IMPUT_ERR_o = "検索期間の指定方法に誤りがあります。";

	// 検索期間外エラー(月)
	private final String MSG_TERM_MONTH_OVER_ERR_o = "粒度が月の場合、検索期間を12ヶ月以内で指定してください。";

	// 検索期間外エラー(日)
	private final String MSG_TERM_DAY_OVER_ERR_o = "粒度が日の場合、検索期間を62日以内で指定してください。";

	// 検索期間外エラー(週)
	private final String MSG_TERM_WEEK_OVER_ERR_o = "粒度が週の場合、検索期間を62日以内で指定してください。";

	// 検索期間外エラー(年)
	private final String MSG_TERM_YEAR_OVER_ERR_o = "粒度が年の場合、検索期間を5年以内で指定してください。";

	// 検索結果なし
	private final String MSG_RESULT_ZERO_o = "検索結果０件です。条件を入力し直してください。";

	// CSV出力値無し
	private final String MSG_CSV_ZERO_o = "CSV出力するデータがありません。";

	// CSV出力完了
	private final String MSG_SUCCESS_CSV_OUT_o = "CSV出力が完了しました。";
	// CSV出力失敗
	private final String MSG_FATAL_CSV_OUT_o = "CSV出力が失敗しました。";

	private final String MSG_FILE_ACCESS_ERR = "ファイルアクセスエラーが発生しました。";
	private final String MSG_ENV_ERR = "環境設定エラーが発生しました。";

	///////////////////////////////////////////////////
	// 共通関数の定義
	///////////////////////////////////////////////////

	/**
	 * IDを元にグループかユーザーかのチェックを行います。
	 *
	 * @param id ID
	 * @return true:グループ false:ユーザー
	 */
	private boolean isGroup(String id){

		boolean ret = false;

		if((id!=null) && (id.substring(0,2).equals("GR"))){
			ret = true;
		}else{
			ret = false;
		}

		return ret;
	}

	/**
	 * IDを元にグループかユーザーかのチェックを行います。
	 *
	 * @param strLoType_o ＬＯタイプ
	 * @return true:コンテナ false:教材
	 */
	private boolean isContainer(String loType){

		boolean ret = false;

		if((loType!=null) && (loType.equals("0"))){
			ret = true;
		}else{
			ret = false;
		}

		return ret;
	}

	/**
	 * 合格状況フィルタ処理。
	 *
	 * @param passType 合格状況表示種別
	 * @param passCondition 合格状況
	 * @return true:表示対象 false:表示対象外
	 */
	private boolean checkPass(int passType, String passCondition){

		// 検索条件対象外はすべてOK
		if(passType == DEF_PASS_OTHER_o){
			return true;
		}

		// 合格のみOK
		if(passType == DEF_PASS_PASS_o){
			if(passCondition!=null && passCondition.equals(DEF_PASS_PASS_RES_o)){
				return true;
			}else{
				return false;
			}
		}

		// 不合格のみOK
		if(passType == DEF_PASS_FAIL_o){
			if(passCondition!=null && passCondition.equals(DEF_PASS_FAIL_RES_o)){
				return true;
			}else{
				return false;
			}
		}

		return false;
	}

	/**
	 * 数値変換処理。
	 *
	 * @param learnTime 数字文字列
	 * @return 数値(引数がnullの場合0を返す。)
	 */
	private long parseLong(String num){
		if( num == null ) {
			return 0;
		}
		String strTemp = "";
		DecimalFormat objFormat = new DecimalFormat( "#" );
		try{
			strTemp = objFormat.format(Double.parseDouble( num ) );
		}catch(Exception e ){
			strTemp = num;
		}
		long ltmp;

		try{
			ltmp = Long.parseLong(strTemp);
		}catch(Exception e){
			ltmp = 0;
		}

		return ltmp;
	}

	/**
	 * 数値変換処理。
	 *
	 * @param num 数字文字列
	 * @return 数値(引数がnullの場合0を返す。)
	 */
	private double parseDouble(String num){
		if( num == null ) {
			return 0d;
		}
		double ltmp = 0d;

		try{
			ltmp = Double.parseDouble(num);
		}catch(Exception e){
			ltmp = 0d;
		}

		return ltmp;
	}

	/**
	 * 割り算を行います。
	 * 0で割ろうとした場合は"---"文字を返します。
	 * @param double 分子
	 * @param int 分母
	 * @param intDecimal 小数点数
	 * @param strAdd 戻りに付与する文字列
	 * @return String 結果
	 */
	private String divideToString( double dblNum, int intNum, int intDecimal,  String strAdd ) {
		if( intNum == 0 ) {
			return STR_EMPTY_FIELD;
		}
		try {
			String strDecimal = "##0";
			StringBuffer sbDecimal = new StringBuffer();
			for( int i = 0; i < intDecimal; i++ ) {
				sbDecimal.append( "0" );
			}
			if( sbDecimal.length() > 0 ) {
				strDecimal += "." + new String( sbDecimal );
			}

			DecimalFormat objFormat = new DecimalFormat( strDecimal );
			return objFormat.format( (dblNum / intNum) ) + strAdd;

		}
		catch( ArithmeticException ae ) {
			return STR_EMPTY_FIELD;
		}
	}

	/**
	 * 空フィールド("---")を空文字に変換します
	 * @param str 変換文字列
	 * @return String 変換後文字列("---"以外の文字列は何もしません。)
	 */
	private String changeEmptyStr( String str ) {
		if( str == null ) {
			return null;
		}

		if( str.equals( STR_EMPTY_FIELD ) || str.equals( STR_BLANK_o ) ) {
			return "";
		}
		return str;
	}

	/**
	 * 時間計算処理。
	 *
	 * @param learnTime 時間（ミリ秒）文字列
	 * @return 時間（ｈ）
	 */
	private long timeToHour(String learnTime){

		double dtmp;

		try{
			dtmp = Double.parseDouble(learnTime);
		}catch(Exception e){
			dtmp = 0;
		}

		long ltmp = (long)(dtmp / 1000 / 60 / 60);

		return ltmp;
	}

	/**
	 * コンテナに存在する教材数を取得する。
	 *
	 * @param cid コンテナID
	 * @return 教材数
	 */
	private int getLOCount(String cid) throws Exception{

		// 配下のLOを検索
		LoRelationClient objLr = new LoRelationClient();
		objLr.setWhereParentID(cid);
		if(!objLr.select()) {
			// 検索がうまくいかなかった場合
			if(objLr.isErr()){
				// エラーの場合
				throw new Exception();
			}else{
				throw new Exception(objLr.getMessage());
			}
		}
		int ret = 0;
		while(objLr.next() == true){
			ret++;
		}

		return ret;
	}

	/**
	 * 数値を桁数で四捨五入した値を返す。
	 *
	 * @param dblNumber		数値
	 * @param intLength		桁数(0 or 1)
	 * @return パーセンテージ
	 */
	private String round(double dblNumber, int intLength)
		throws ArithmeticException
	{
		double dblLength = (double)(10 ^ intLength);
		double dblReturn = (double)(Math.round( dblNumber * dblLength ) / dblLength);

		DecimalFormat objFormat = new DecimalFormat( "0.#" );
		return objFormat.format( dblReturn );
	}

	/**
	 * 引数がnullなら「---」に変換して返す。
	 *
	 * @param strValue
	 * @return
	 */
	private String null2hyphen( String strValue ) {
		if( strValue == null || strValue.equals( "" ) ) {
			return STR_EMPTY_FIELD;
		}
		else {
			return strValue;
		}
	}
	/**
	 * 引数がnullなら「0」に変換して返す。
	 *
	 * @param strValue
	 * @return
	 */
	private String null2zero( String strValue ) {
		if( strValue == null || strValue.equals( "" ) ) {
			return "0";
		}
		else {
			return strValue;
		}
	}

	/**
	 * 分子を分母で割りパーセンテージで返す。
	 *
	 * @param strNumerator		分子
	 * @param strDenominator	分母
	 * @return パーセンテージ
	 */
	private String getPercent(String strNumerator, String strDenominator )
		throws Exception
	{
		DecimalFormat objFormat = new DecimalFormat( "##0.0" );
		objFormat.setMultiplier( 100 );
		objFormat.setPositivePrefix( "" );
		objFormat.setPositiveSuffix( "" );

		return objFormat.format( Double.parseDouble( strNumerator ) / Double.parseDouble( strDenominator ) );
	}

}
