/*
このファイルの中身は、NTT オープンソースライセンス　バージョン 1.0（「本
契約」という）の適用を受けます。
本契約を遵守しない限り、このファイルを使用してはなりません。
本契約のコピーは、次のＵＲＬから入手できます。
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

本契約に基づき頒布されるソフトウェアは、現状のまま、明示又は黙示のあらゆ
る種類の保証なしで、頒布されます。本契約に基づく権利及び制限を律する特定
の文言については、本契約を参照してください。

「オリジナルコード」は、 NTT Cyber Space Laboratories Code です。 
「オリジナルコード」の「初期開発者」は、日本電信電話株式会社です。  
日本電信電話株式会社により創作された部分は、Copyright (C) 2004 
日本電信電話株式会社 です。
全ての権利が留保されます。 
「コントリビュータ」：_____________________________________ 


The contents of this file are subject to the NTT Opensource License
Version 1.0 (the License); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

Software distributed under the License is distributed on an AS IS
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is NTT Cyber Space Laboratories Code .

The Initial Developer of the Original Code is NIPPON TELEGRAPH AND 
TELEPHONE CORPORATION.
Portions created by the NIPPON TELEGRAPH AND TELEPHONE CORPORATION 
are Copyright (C) 2004 NIPPON TELEGRAPH AND TELEPHONE CORPORATION. 
All Rights Reserved.

Contributor(s) ______________________________________.
*/

//
//	OperationSession セッション情報部品クラス
//			変更履歴
//				2004/01/08	新規作成	柴田宗近
//
package jp.co.ntt.lms.xms.login.base;

import javax.servlet.http.HttpSession;

import jp.co.ntt.lms.xms.common.user.*;
import jp.co.ntt.lms.xms.framework.XmsException;

/**
 * セッション情報部品クラス。<BR>
 * 
 * セッション情報の操作を行うstaticな部品です。<BR>
 * 現時点（作成時）ではログイン処理で扱う処理のみを実装します。<BR>
 * 
 */
public class OperateSession {

	/**
	 *  学習者判断のセッションキー。<BR>
	 */
	private static final String LEANER = "learner";

	/**
	 * ユーザIDのセッションキー。<BR>
	 */
	private static final String USER_ID = "userId";

	/**
	 * ユーザパスワードのセッションキー。<BR>
	 */
	private static final String PASSWORD = "password";

	/**
	 * ログイン情報のセッションキー。<BR>
	 */
	private static final String IS_LOGIN = "isLogin";

	/**
	 * AD-DD経由フラグのセッションキー。<BR>
	 */
	private static final String AD_LOGIN = "AdLogin";

	/**
	 * AD-DD経由フラグの設定値<BR>
	 */
	private static final String AD_LOGIN_ON = "AD_LOGIN_ON";

	/**
	 * グールプツリーフラグセッションキー。<BR>
	 */
	private static final String GR_TREE_TYPE = "GR_tree_type";

	/**
	 * ユーザオブジェクトセッションキー。<BR>
	 * 外部でgetAttributeする際に使用するためpublic<BR>
	 */
	public static final String USER_SESSION = UserConstant.KEY_USER;

	/**
	 * ログインIDのセッションキー。<BR>
	 * 外部でgetAttributeする際に使用するためpublic<BR>
	 */
	public static final String LOGIN_ID = "loginId";

	/**
	 * 同一ログインIDで連続してパスワードを間違えた回数をセッションに格納するキー。<BR>
	 * 外部でgetAttributeする際に使用するためpublic<BR>
	 */
	public static final String ERR_PASS_COUNT = "ERR_PASS_COUNT";

	/**
	 * セッションに格納します（ログイン処理正常時）。<BR>
	 * @param HttpSession セッション
	 * @param userObject ログインしているユーザオブジェクト
	 * @return なし
	 * @exception XmsException 予期しない例外(RMI例外など)
	 */
	public static void setSessionFromLogin(HttpSession session, User userObject) 
		throws XmsException {

		// セッションの格納
		// 認証結果をセッションに格納する(旧来の方法)
		// 影響範囲が広いからこの実装は残しておく
		// いずれなくしたい
		// ユーザID
		session.setAttribute( USER_ID, userObject.getUserID() );
		// ログインID
		session.setAttribute( LOGIN_ID, userObject.getLoginID() );
		// パスワード
		session.setAttribute( PASSWORD, userObject.getPassword() );
		// ログイン済み判定
		session.setAttribute( IS_LOGIN, "OK" );
		// グループツリー表示タイプ
		session.setAttribute( GR_TREE_TYPE, userObject.getGroupTreeType() );
		
		// 新たな方式
		// ユーザオブジェクトをセッションに格納する
		session.setAttribute( USER_SESSION, userObject );
		// 失敗回数格納
		session.removeAttribute( ERR_PASS_COUNT );
	}

	/**
	 * セッションに格納します（パスワード不一致時）。<BR>
	 * @param HttpSession セッション
	 * @param loginID ログインID
	 * @param errorCount 失敗回数
	 * @param userID ユーザID
	 * @return なし
	 * @exception XmsException 予期しない例外(RMI例外など)
	 */

	public static void setSessionFromErrorPassword( HttpSession session,
													  String loginID,
													  Integer errorCount,
													  String userID ) 
						  
		throws XmsException {

		// ログインID格納
		session.setAttribute( LOGIN_ID, loginID );
		// 失敗回数格納
		session.setAttribute( ERR_PASS_COUNT, errorCount );

        // ユーザID格納
        if ( userID != null ) {
			session.setAttribute( USER_ID, userID );        
        }

	}

	/**
	 * セッションに格納します（ADログイン時）。<BR>
	 * @param HttpSession セッション
	 * @param userObject ログインしているユーザオブジェクト
	 * @return なし
	 * @exception XmsException 予期しない例外(RMI例外など)
	 */
	public static void setSessionFromADLogin( HttpSession session,
												User userObject ) 
		throws XmsException {

		// ユーザID
		session.setAttribute( USER_ID, userObject.getUserID() );
		// ログインID
		session.setAttribute( LOGIN_ID, userObject.getLoginID() );
		// パスワード
		session.setAttribute( PASSWORD, userObject.getPassword() );
		// ログイン済み判定
		session.setAttribute( IS_LOGIN, "OK" );
		// AD-DD経由は必ず学習者
		session.setAttribute( LEANER, "YES" );
		// AD-DD経由フラグを設定
		session.setAttribute( AD_LOGIN, AD_LOGIN_ON );
		// グループツリー表示タイプ
		session.setAttribute( GR_TREE_TYPE, userObject.getGroupTreeType() );

		// 新たな方式
		// ユーザオブジェクトをセッションに格納する
		session.setAttribute( USER_SESSION, userObject );
	}

	/**
	 * セッションに格納します（アサインメール自動ログイン処理正常時）。<BR>
	 * @param HttpSession セッション
	 * @param userObject ログインしているユーザオブジェクト
	 * @param learner 学習者：YES  学習者じゃない（管理者）：NO
	 * @return なし
	 * @exception XmsException 予期しない例外(RMI例外など)
	 */
	public static void setSessionFromAssignLogin( HttpSession session, 
													User userObject,
													String learner ) 
		throws XmsException {

		// セッションの格納
		// 認証結果をセッションに格納する(旧来の方法)
		// 影響範囲が広いからこの実装は残しておく
		// いずれなくしたい
		// ユーザID
		session.setAttribute( USER_ID, userObject.getUserID() );
		// ログインID
		session.setAttribute( LOGIN_ID, userObject.getLoginID() );
		// パスワード
		session.setAttribute( PASSWORD, userObject.getPassword() );
		// ログイン済み判定
		session.setAttribute( IS_LOGIN, "OK" );
		// グループツリー表示タイプ
		session.setAttribute( GR_TREE_TYPE, userObject.getGroupTreeType() );
		// 学習者判定
		session.setAttribute( LEANER, learner );
		
		// 新たな方式
		// ユーザオブジェクトをセッションに格納する
		session.setAttribute( USER_SESSION, userObject );
	}

}