/////////////////////////////////////////////////////////////////
//Copyright (C) 2005 NTT CORPORATION.
//
//	セッション情報設定クラス
//
//		変更履歴
//			2005.02.19  新規作成  村上 靖征
//
//	機能
//
//	このクラスはセッション情報を設定するクラスです。
//
////////////////////////////////////////////////////////////////

package jp.co.ntt.lms.xmf;

import java.util.ArrayList;

import javax.servlet.http.HttpSession;

import jp.co.ntt.lms.xmo.GroupAndPeople.GroupAndPeopleClient;
import jp.co.ntt.lms.xmo.Groups.GroupsClient;
import jp.co.ntt.lms.xmo.People.PeopleClient;
import jp.co.ntt.lms.xmo.RoleAssignments.RoleAssignmentsClient;
import jp.co.ntt.lms.xmo.Roles.RolesClient;
import jp.co.ntt.lms.xms.common.user.User;
import jp.co.ntt.lms.xms.framework.XmsInnerException;

/**
 *  セッション情報設定クラス
 * 
 *  このクラスはセッション情報を設定するクラスです。
 * 
 *  @author 村上 靖征
 *  @version 1.0
 */
public class XmfOperateSession
{
	/**
	 * セッションにユーザー情報を設定する。
	 * 以下の属性値が設定される。
	 * 
	 * userinfo_loginid             - ログインID
     * userinfo_userid              - ユーザーID
     * userinfo_username            - ユーザー名
     * userinfo_groupname           - グループ名
     * userinfo_groupid             - グループID
     * userinfo_roleid_list         - ユーザーにアサインされているロールIDのリスト
     * userinfo_rolegroupid_list    - ユーザーにアサインされているロールのグループIDのリスト
     * 									順序はロールのリストの順に対応する。
     * userinfo_rolename_list       - ユーザーにアサインされているロール名のリスト
     * 									順序はロールのリストの順に対応する。
     * userinfo_rolegroupname_list  - ユーザーにアサインされているロールのグループ名のリスト
     * 									順序はロールのリストの順に対応する。
	 * 
	 * @param session セッション
	 * @param user	ユーザー情報
	 * @throws Exception
	 */
	public static void setUserInfo(HttpSession session, User user) throws Exception
	{
        //ユーザー名の取得
        PeopleClient pClient = new PeopleClient();
        pClient.setWhereUserID(user.getUserID());
        if (!pClient.select())
        {
            // エラー処理
            throw new XmsInnerException("ユーザーIDからユーザー情報が取得できません。");
        }
        if (!pClient.next())
        {
            // エラー処理
            throw new XmsInnerException("ユーザーIDから取得されるユーザー情報がありません。");
        }
        String userName = pClient.getUserName();

        //グループIDの取得
        String groupId = "";
        GroupAndPeopleClient gpClient = new GroupAndPeopleClient();
        gpClient.setWhereChildID(user.getUserID());
        if (gpClient.select())
        {
            if (gpClient.next())
            {
                groupId = gpClient.getParentID();
            }
        }

        //グループ情報の取得
        String groupName = "";
        GroupsClient gsClient = new GroupsClient();
        if (groupId.length() > 0)
        {
            gsClient.setWhereGroupID(groupId);
            if (!gsClient.select())
            {
                // エラー処理
                throw new XmsInnerException("グループIDからグループ情報が取得できません。");
            }
            if (!gsClient.next())
            {
                // エラー処理
                throw new XmsInnerException("グループIDから取得されるグループ情報がありません。");
            }
            groupName = gsClient.getGroupName();
        }
        else
        {
            groupName = "";
        }

        //ロール情報の取得
        RoleAssignmentsClient raClient = new RoleAssignmentsClient();
        raClient.setWhereUserID(user.getUserID());
        ArrayList roleIdList = new ArrayList();
        ArrayList roleGroupIdList = new ArrayList();
        if (raClient.select())
        {
            int count = raClient.getResultCount();
            for (int i=0; i < count; i++)
            {
                raClient.next();
                roleIdList.add(raClient.getRoleID());
                roleGroupIdList.add(raClient.getGroupID());
            }
        }
        
        ArrayList roleNameList = new ArrayList();
        RolesClient rolesClient = new RolesClient();
        for (int i=0; i < roleIdList.size(); i++)
        {
            rolesClient.clear();
            rolesClient.setWhereRoleID((String)roleIdList.get(i));
            if (rolesClient.select())
            {
                rolesClient.next();
                roleNameList.add(rolesClient.getRoleName());
            }
        }
        
        ArrayList roleGroupNameList = new ArrayList();
        for (int i=0; i < roleGroupIdList.size(); i++)
        {
            gsClient.clear();
            gsClient.setWhereGroupID((String)roleGroupIdList.get(i));
            if (gsClient.select())
            {
                gsClient.next();
                roleGroupNameList.add(gsClient.getGroupName());
            }
        }
        
        session.setAttribute("userinfo_loginid", user.getLoginID());
        session.setAttribute("userinfo_userid", user.getUserID());
        session.setAttribute("userinfo_username", userName);
        session.setAttribute("userinfo_groupname", groupName);
        session.setAttribute("userinfo_groupid", groupId);
        session.setAttribute("userinfo_roleid_list", roleIdList);
        session.setAttribute("userinfo_rolegroupid_list", roleGroupIdList);
        session.setAttribute("userinfo_rolename_list", roleNameList);
        session.setAttribute("userinfo_rolegroupname_list", roleGroupNameList);
		
	}
}
