/*
このファイルの中身は、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) ______________________________________.
*/

//
//	ViewAuthorityInfo 画面表示制御情報保持クラス
//			変更履歴
//				2004/01/08	新規作成	柴田宗近
//
package jp.co.ntt.lms.xms.login.base;

import java.util.Vector;

import jp.co.ntt.lms.xmo.XMOPropertyDef;

/**
 * 画面表示制御情報保持クラス。<BR>
 * 
 * 画面表示制御（初期メニューに関する）情報を取得、保持します。<BR>
 * 
 */
public class ViewAuthorityInfo {

	/**
	 * 初期メニュー名称<BR>
	 */
	private String iniMenu = null;

	/**
	 * ツリー表示タイプ<BR>
	 */
	private String treeViewType = null;

	/**
	 * 優先度<BR>
	 */
	private String priority = null;

	/**
	 * 権限情報保持クラスリスト<BR>
	 */
	private Vector XMOList = null;

	/**
	 * コンストラクタです。<BR>
	 * @param String 初期メニュー名称
	 * @param String ツリー表示タイプ
	 * @param String 優先度
	 * @param Vector 権限情報保持クラスリスト
	 */
	public ViewAuthorityInfo( String iniMenu,
								String treeViewType,
								String priority,
								Vector XMOList ) {

		// 初期メニュー情報
		this.iniMenu = iniMenu;
		// ツリー表示タイプ
		this.treeViewType = treeViewType;
		// 優先度
		this.priority = priority;
		// 権限情報保持クラスリスト
		this.XMOList = XMOList;
	}

	/**
	 * 初期メニュー名称を取得します。<BR>
	 * @return String 初期メニュー名称
	 */
	public String getIniMenu() {
		return this.iniMenu;
	}

	/**
	 * ツリー表示タイプを取得します。<BR>
	 * @return String ツリー表示タイプ
	 */
	public String getTreeViewType() {
		return this.treeViewType;
	}

	/**
	 * 優先度を取得します。<BR>
	 * @return String 優先度
	 */
	public String getPriority() {
		return this.priority;
	}

	/**
	 * 権限情報保持クラスリストを取得します。<BR>
	 * @return Vector 権限情報保持クラスリスト
	 */
	public Vector getXMOList() {
		return this.XMOList;
	}

	/**
	 * 権限情報保持クラスをリストに追加します。<BR>
	 * @param XMO 権限情報保持クラス
	 * @return なし
	 */
	public void addXMOList( XMO XMOObject ) {
		this.XMOList.add( XMOObject );
	}

	/**
	 * 当該初期メニューにおける学習者フラグを取得します。<BR>
	 * 権限情報保持クラスリストから、<BR>
	 * 学習者の権限があるかどうか判定します<BR>
	 * @return boolean true: 学習者 false: 学習者以外
	 */
	public boolean isLearner( ) {

		//-------------------------------------------------------------------------------
		// 学習者とは？
		//   ユーザに割り当てられている権限（XMOEntry）のうち、
		//      学習のみを持つ場合
		//      ログ管理のみを持つ場合
		//      学習とログ管理のみを持つ場合
		//   のいずれか。  
		//-------------------------------------------------------------------------------

		// 返却用学習者フラグ
		boolean learnerReturnFlag = true;

		// 権限情報保持クラスの数を取得
		int XMOListCount = this.XMOList.size();

		// 権限情報保持クラスの数分繰り返し
		for( int i = 0; i < XMOListCount; i++ ){

			// 権限情報保持クラスを取得
			XMO XMOObject = ( XMO ) this.XMOList.get( i );

			// クラス名称を取得
			String className = XMOObject.getClassName();

			//----------------------------------------------------------------------------
			// 学習権限でない権限がひとつでもあった場合はこのユーザは学習者ではなくなる
			// クラス名称が「learn」である　または「log」であるかどうか
			// この真偽値が学習者フラグに設定される
			//----------------------------------------------------------------------------
			// 2005.03.22 Modified by N.Umehara メソッド学習者を追加。
			learnerReturnFlag = (className.equals( XMOPropertyDef.LEARN_XMO ) 
									|| className.equals( XMOPropertyDef.LOG_XMO )
										|| className.equals( XMOPropertyDef.METHOD_LEARN_XMO ));

			// 学習者じゃなくなったかどうか
			if( learnerReturnFlag == false ){
				// 学習者じゃなくなった場合
				// 調べる必要がないのでループ終了
				break;
			}
		}

		// 学習者フラグを返却
		return learnerReturnFlag;

	}
}