/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	スマートフォース登録画面表示Action
//
//		変更履歴
//			2005.02.16  新規作成  氏名 石崎賢太郎
//
//	機能
//
//	スマートフォース登録画面表示を行うために使用する。
//
/////////////////////////////////////////////////////////////////
package jp.co.ntt.lms.xmf.actions.lo.SmartForce;

import java.util.Vector;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jp.co.ntt.lms.lo.LoTopClient;
import jp.co.ntt.lms.lo.SmartForce.SmartForceLoEnv;
import jp.co.ntt.lms.lo.SmartForce.SmartForceLoPropertyDef;
import jp.co.ntt.lms.xmf.common.CommonFunction;
import jp.co.ntt.lms.xmo.Environment;
import jp.co.ntt.lms.xmo.MessageData;
import jp.co.ntt.lms.xmo.Lo.LoClient;
import jp.co.ntt.lms.xmo.Lo.LoMessage;
import jp.co.ntt.lms.xmo.Lo.MaterialData;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
//ADD 2005/02/13 START Katsuhiko Kagami(UNITEC) [LO購入項目追加]
import java.util.*;
import jp.co.ntt.lms.xmo.Lo.LoExtend.LoExtendTable;
//ADD 2005/02/13 END Katsuhiko Kagami(UNITEC) [LO購入項目追加] 

/**
 * @author Kentaro Ishizaki
 */
public class SmartForceLoInsertAction extends Action
{
//ADD 2005/02/23 START Tsuboi(UNITEC) [キーワードリスト数]
	private final int NUM_LOSEARCH_KEYWORD_COUNT = 5;
//ADD 2005/02/23 END Tsuboi(UNITEC) [キーワードリスト数] 

	/**
	 * メッセージ定数。
	 */
	private static final String MSG_ENV_ERR = "環境設定エラーが発生しました。";

	/**
	 * strutsフレームワークから呼ばれるメソッドです。
	 * 
	 * @param mapping マッピングオブジェクト。
	 * @param form アクションフォームオブジェクト。
	 * @param request リクエストオブジェクト。
	 * @param response レスポンスオブジェクト。
	 * @return ActionForward アクションフォワードオブジェクト。
	 * @throws Exception
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		// URLパラメータの取得
		String strParentID = request.getParameter( "parentID" );
		String strLoType = request.getParameter( "LoType" );
		String strReturnURL = request.getParameter( "returnURL" );
		String strAction = request.getParameter( "action" );

		String strLogin_UserID = (String)request.getSession().getAttribute( "userId" );		// ログインユーザID

		String strMessage = null;	//サーバエラーメッセージ
		String strForeignID = null;	//外部ID初期化
		String strMessageID = null;		//メッセージID初期化
		String strForeignMessageID = null;	//外部メッセージID初期化
// ADD 2005/02/23 START NaotoIto [LO購入項目追加]
		String strBuyStatus 	= CommonFunction.null2blank( request.getParameter( "BuyStatus" ) );		// 購入ステータス
// ADD 2005/02/23 END NaotoIto [LO購入項目追加]
// ADD 2005/02/23 START NaotoIto [推奨LO検索キーワード追加]
		String[] strLoSearchKeyWord = new String[NUM_LOSEARCH_KEYWORD_COUNT];
		for(int k = 0; k < NUM_LOSEARCH_KEYWORD_COUNT; k++){
			strLoSearchKeyWord[k] = CommonFunction.null2blank(request.getParameter("LoSearchKeyWord_" + k));
		}
// ADD 2005/02/23 END NaotoIto [推奨LO検索キーワード追加]
// ADD 2005/02/23 START NaotoIto [属性追加対応]
		String strLomDetail 	= CommonFunction.null2blank( request.getParameter( "LomDetail" ) );
// ADD 2005/02/23 END NaotoIto [属性追加対応]

		//XMsS.iniファイルからユーザPrefix情報を取得する
		Environment ObjEnv = new Environment();
		String StrPrefix = ObjEnv.getLoPrefix();

		// 入力項目

		//XMS.iniファイルにユーザPrefixが設定されていない場合
		if ( StrPrefix == null ){
			// 外部ID
			strForeignID = request.getParameter( "ForeignID" );
			if( strForeignID == null ) {
				strForeignID = "";
			}
		}

		// LOタイトル
		String strLoTytle = request.getParameter( "LoTytle" );
		if( strLoTytle == null ) {
			strLoTytle = "";
		}
		// 教材ID
		String strMaterialID = request.getParameter( "MaterialID" );
		if( strMaterialID == null ) {
			strMaterialID = "";
		}
		else
		{
			int intIndex = strMaterialID.lastIndexOf("|");
			if(intIndex > -1)
			{
				strMaterialID = strMaterialID.substring(0, intIndex);
			}
		}


		// 説明
		String strLoExplanation = request.getParameter( "Loexplanation" );
		if( strLoExplanation == null ) {
			strLoExplanation = "";
		}
		// 作成日
		String strCreateDate = request.getParameter( "LocreateDate" );
		if( strCreateDate == null ) {
			strCreateDate = "";
		}

		// 完結要件
		String strConclusion = request.getParameter( "hdnConclusion" );
		if( strConclusion == null ) {
			strConclusion = "";
		}

		// バージョン
		String strVersion = request.getParameter( "Version" );
		if( strVersion == null ) {
			strVersion = "";
		}
		// キーワード
		String strKeyWord = request.getParameter( "KeyWord" );
		if( strKeyWord == null ) {
			strKeyWord = "";
		}
		String strPrere		 	= CommonFunction.null2blank( request.getParameter( "hdnPrere" ) );			// 前提条件
		

		// アクションフラグが設定されていた場合は登録処理を行います
		if( strAction != null && strAction.equals( "on" ) ) {
			LoClient objLo = new LoClient();
			// LOテーブルの設定
			objLo.setParentID( strParentID );			// 親ID
			objLo.setLoType( strLoType );				// LOタイプ

			//XMS.iniファイルにユーザPrefixが設定されていない場合
			if ( StrPrefix == null ){
				objLo.setForeignID( strForeignID );			// 外部ID
			}
		
			// スマートフォース教材個別テーブルの設定
			// 共通登録項目の設定

			objLo.setLoExplanation(strLoExplanation);								// LO説明
			objLo.setLoTytle(strLoTytle);											// LOタイトル
			objLo.setLoVersion(strVersion);											// バージョン
			objLo.setLoCreateDate(strCreateDate);									// 作成日付
			objLo.setDeleteFlag("0");												// 隠しフラグ
			objLo.setKeyWord(strKeyWord);											// キーワード
			objLo.setValue( SmartForceLoPropertyDef.COURSECODE, strMaterialID );	// 教材ID
			objLo.setValue( SmartForceLoPropertyDef.CONCLUSION, strConclusion );	// 完結要件
			objLo.setValue( SmartForceLoPropertyDef.LOGIN_USER_ID, strLogin_UserID );	// ログインユーザID
			objLo.setValue( SmartForceLoPropertyDef.PRERE, strPrere );					// 前提条件

			// 登録処理の実行
			if( !objLo.insert() ) {
				// 検索がうまくいかなかった場合
				if( objLo.isErr() ) {
					// エラーの場合
					request.setAttribute("message", "");
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", objLo.getURL());
					return mapping.findForward("error");
				}
				else {
					strMessage =  objLo.getMessage();
					//メッセージIDを取得する
					strMessageID = objLo.getMessageID();
					strForeignMessageID = LoMessage.EXIT_FOREIGNID_WAR;
				}
// ADD 2005/02/23 START NaotoIto [LO購入項目追加][推奨LOキーワード追加]
//			}
			} else {
				if (objLo.next()) {
					// Loの登録に成功した場合は、LoExtendの登録を行う。
					String strRegLoID = objLo.getLoID();
					String strRegBuyStatus = null;
					if (strBuyStatus.equals("")) {
						// 購入ステータスの選択が無かった場合は初期値は購入不要
						strRegBuyStatus = LoExtendTable.LOEXTEND_NOREQUIRE_BUY;
					} else {
						strRegBuyStatus = strBuyStatus;
					}

// ADD 2005/02/23 START NaotoIto [推奨LO検索キーワード追加]
					//for(int k = 0; k < NUM_LOSEARCH_KEYWORD_COUNT; k++){
					//	if(!strLoSearchKeyWord[k].equals("")){
					//		strLoSearchKeyWord[k] = CommonFunction.encodeSJIS(strLoSearchKeyWord[k]);
					//	}
					//}
// ADD 2005/02/23 END NaotoIto [推奨LO検索キーワード追加]
					
					if (!objLo.insertLoExtend(strRegLoID, strRegBuyStatus, strLoSearchKeyWord[0], strLoSearchKeyWord[1], strLoSearchKeyWord[2], strLoSearchKeyWord[3], strLoSearchKeyWord[4])) {
						// LoExtendの登録の失敗
// ADD 2005/02/23 START NaotoIto [エラーURLを返却]
						request.setAttribute("errorurl", objLo.getURL());
						return mapping.findForward("error");						
// ADD 2005/02/23 END NaotoIto [エラーURLを返却]
					}

// ADD 2005/02/23 START NaotoIto [属性追加対応]
					if (!strLomDetail.trim().equals("")) {
						//改行変換
						for (int cnt = 0; cnt < strLomDetail.trim().length(); cnt ++) {
							strLomDetail = CommonFunction.replace(strLomDetail.trim(), "<br>", "\r\n");
						}

						Vector inDisoData = objLo.setLomDetailData(strLomDetail, strRegLoID);
						if (!objLo.updateLomData(inDisoData)) {
							// LoExtendの登録の失敗
// ADD 2005/02/23 START NaotoIto [エラーURLを返却]
							request.setAttribute("errorurl", objLo.getURL());
							return mapping.findForward("error");						
// ADD 2005/02/23 END NaotoIto [エラーURLを返却]
						}
					}
// ADD 2005/02/23 END NaotoIto [属性追加対応]
				} else {
					// Lo登録に失敗したケース。ロジック的にはここには来ないはず
// ADD 2005/02/23 START NaotoIto [エラーURLを返却]
					request.setAttribute("errorurl", objLo.getURL());
					return mapping.findForward("error");
// ADD 2005/02/23 END NaotoIto [エラーURLを返却]											
				}
			}
// ADD 2005/02/23 END NaotoIto  [LO購入項目追加][推奨LOキーワード追加]			
		}
		
		
		// 教材リストの取得
		Environment objEnv = new Environment();
		String strLoServerName = objEnv.getLoServerName();

		LoTopClient objLoTop = new LoTopClient(strLoServerName, strLoType);
		Vector vecMaterialList = new Vector();
		if( objLoTop.getMaterialList() ) {
			for( int i = 0; i < objLoTop.getMaterialSize(); i++ ) {
				vecMaterialList.add( objLoTop.getMaterialData(i) );
			}
		}
		else
		{
			MessageData objMd = objLoTop.getMessageData();
		}
		
		
		//文字化け対応
		//if( strLoTytle != "" )
		//{
		//	strLoTytle = CommonFunction.encodeSJIS(strLoTytle);
		//}
		//if( strForeignID != "" )
		//{
		//	strForeignID = CommonFunction.encodeSJIS(strForeignID);
		//}
		//if( strKeyWord != "" )
		//{
		//	strKeyWord = CommonFunction.encodeSJIS(strKeyWord);
		//}
		//if( strLoExplanation != "" )
		//{
		//	strLoExplanation = CommonFunction.encodeSJIS(strLoExplanation);
		//}
		//if( strVersion != "" )
		//{
		//	strVersion = CommonFunction.encodeSJIS(strVersion);
		//}
		//if( strCreateDate != "" )
		//{
		//	strCreateDate = CommonFunction.encodeSJIS(strCreateDate);
		//}
		strCreateDate		= CommonFunction.blank2today(strCreateDate);
		//完結要件
		//if( strConclusion != "" )
		//{
		//	strConclusion = CommonFunction.encodeSJIS(strConclusion);
		//}
		//if( strPrere != "" )
		//{
		//	strPrere = CommonFunction.encodeSJIS(strPrere);
		//}
// ADD 2005/02/23 START NaotoIto [LO購入項目追加]
	//if( strBuyStatus != "" )
	//{
	//	strBuyStatus = CommonFunction.encodeSJIS(strBuyStatus);
	//}
// ADD 2005/02/23 END NaotoIto [LO購入項目追加]

		// 改行コード"\n"を"<br>"に置換
		String strShowPrere = "";
		if ( strPrere != null && !strPrere.equals( "" ) )
		{
			strShowPrere = CommonFunction.replace( strPrere, "\n", "<br>" );
		}
// ADD 2005/02/23 START NaotoIto [属性追加対応]
	//if( strLomDetail != "" )
	//{
	//	strLomDetail = CommonFunction.encodeSJIS(strLomDetail);
	//}
	// 改行コード"\n"を"<br>"に置換
	String strShowLomDetail = "";
	if ( strLomDetail != null && !strLomDetail.equals( "" ) )
	{
		strShowLomDetail = CommonFunction.replace( strLomDetail, "\n", "<br>" );
	}
// ADD 2005/02/23 END NaotoIto [属性追加対応]

		// マテリアル情報を配列に設定
		Object[][] arrayMaterial = new Object[vecMaterialList.size()][3];
		
		String	strTemp = "";
		SmartForceLoEnv objSFEnv = new SmartForceLoEnv();
		String lsDBEnv = objSFEnv.getDBType();
		if(lsDBEnv == null || lsDBEnv.trim().equals("")) {
			lsDBEnv = objEnv.getDBType();
		}
		for( int i = 0; i < vecMaterialList.size(); i++ ) {
			MaterialData objMaterial = (MaterialData)vecMaterialList.get(i);
			if( strMaterialID.equals( objMaterial.getMaterialID() ) ) {
				try {
					//DB種別情報が "0" の時　MS SQLServer
					//DB種別情報が "1" の時　Oracle
					if ( lsDBEnv.equals(Environment.DB_SQLSERVER) ) {
						strTemp  = objMaterial.getTitle()/*CommonFunction.encodeSJIS(objMaterial.getTitle())*/;
					}
					else {
						strTemp  = objMaterial.getTitle();
					}
				}
				catch( Exception e ) {
					e.printStackTrace();
					request.setAttribute("message", MSG_ENV_ERR);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
				
				arrayMaterial[i][0] = new Boolean(true);
				arrayMaterial[i][1] = objMaterial;
				arrayMaterial[i][2] = strTemp;
			}
			else {
				try {
					//DB種別情報が "0" の時　MS SQLServer
					//DB種別情報が "1" の時　Oracle
					if ( lsDBEnv.equals(Environment.DB_SQLSERVER) ) {
						strTemp  = objMaterial.getTitle()/*CommonFunction.encodeSJIS(objMaterial.getTitle())*/;
					}
					else {
						strTemp  = objMaterial.getTitle();
					}
				}
				catch( Exception e ) {
					e.printStackTrace();
					request.setAttribute("message", MSG_ENV_ERR);
					request.setAttribute("detail", "");
					request.setAttribute("close", "on");
					request.setAttribute("errorurl", "");
					return mapping.findForward("error");
				}
				
				arrayMaterial[i][0] = new Boolean(false);
				arrayMaterial[i][1] = objMaterial;
				arrayMaterial[i][2] = strTemp;
			}
		}
		
//		 ADD 2005/02/23 START Tsuboi [strLoSearchKeyWordをVectorに挿入]
		Vector vecLoSearchKeyWordList = new Vector();		
		for(int k = 0; k < NUM_LOSEARCH_KEYWORD_COUNT; k++){
			vecLoSearchKeyWordList.add(strLoSearchKeyWord[k]) ;
		}
//		 ADD 2005/02/23 END Tsuboi
		
		// リクエストに変数をセット
		request.setAttribute("strParentID", strParentID);
		request.setAttribute("strMessage", strMessage);
		request.setAttribute("strReturnURL", strReturnURL);
		request.setAttribute("strMessageID", strMessageID);
		request.setAttribute("strForeignMessageID", strForeignMessageID);
		request.setAttribute("strAction", strAction);
		request.setAttribute("strLoType", strLoType);
		request.setAttribute("strConclusion", strConclusion);
		request.setAttribute("strCreateDate", strCreateDate);
		request.setAttribute("strPrere", strPrere);
		request.setAttribute("strLoTytle", strLoTytle);
		request.setAttribute("StrPrefix", StrPrefix);
		request.setAttribute("strForeignID", strForeignID);
		request.setAttribute("arrayMaterial", arrayMaterial);
		request.setAttribute("strKeyWord", strKeyWord);
		request.setAttribute("strLoExplanation", strLoExplanation);
		request.setAttribute("strVersion", strVersion);
		request.setAttribute("strShowPrere", strShowPrere);
// ADD 2005/02/23 START NaotoKIto [購入フラグ、LO詳細の為のパラメータ、推奨LO検索キーワードの引渡] 他
		request.setAttribute("LOEXTEND_REQUIRE_BUY", LoExtendTable.LOEXTEND_REQUIRE_BUY);
		request.setAttribute("LOEXTEND_NOREQUIRE_BUY", LoExtendTable.LOEXTEND_NOREQUIRE_BUY);
		request.setAttribute("strBuyStatus", strBuyStatus);
		request.setAttribute("strLomDetail", strLomDetail);
		request.setAttribute("vecLoSearchKeyWordList", vecLoSearchKeyWordList);
// ADD 2005/02/23 END NaotoKIto [購入フラグ、LO詳細の為のパラメータ、推奨LO検索キーワードの引渡] 他

		return mapping.findForward("success");
	}

}
