/*
 * MosP - Mind Open Source Project    http://www.mosp.jp/
 * Copyright (C) MIND Co., Ltd.       http://www.e-mind.co.jp/
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
package jp.mosp.common.part;

import java.util.List;

import jp.mosp.common.dao.CmComponentDao;
import jp.mosp.common.dto.CmComponentDto;
import jp.mosp.common.utils.VariousUtil;

/**
 * メニューに関するPartクラス
 * @author yoshida
 * 	@version	0.0.3
 */
public class ComponentPart extends BasePart {
	
	/**
	 * コンストラクタ
	 */
	public ComponentPart() {
		super();
	}
	
	/**
	 * コンストラクタ
	 * @param partInfo Partを利用する際に必要な情報
	 */
	public ComponentPart(PartInfo partInfo) {
		super(partInfo);
	}
	

	/**
	 * CmComponentDaoインスタンス
	 */
	private CmComponentDao	componentDao;
	

	/**
	 * CM_COMPONENTテーブル用のDAO取得
	 * @return	初期化済みCmComponentDaoインスタンス
	 * @throws Exception 例外処理が発生した場合
	 */
	public CmComponentDao getCmComponentDao() throws Exception {
		if (VariousUtil.isNull(componentDao)) {
			componentDao = (CmComponentDao)getPreparedDao(CmComponentDao.class.getCanonicalName());
		}
		return componentDao;
	}
	
	/**
	 * メニュー構成情報取得
	 * @param compcode		対象コマンドユニットコード
	 * @param division		対象分類コード
	 * @return	メニュー構成情報
	 * @throws Exception 例外処理が発生した場合
	 */
	public CmComponentDto findForDto(String compcode, String division) throws Exception {
		return getCmComponentDao().findForDto(compcode, division);
	}
	
	/**
	 * メニュー構成情報取得
	 * @param compcode		対象コマンドユニットコード
	 * @return				メニュー構成情報
	 * @throws Exception 例外処理が発生した場合
	 */
	public CmComponentDto findForKey(String compcode) throws Exception {
		return getCmComponentDao().findForKey(compcode);
	}
	
	/**
	 * メニュー構成情報取得
	 * @param compcode		対象コマンドユニットコード
	 * @return				メニュー構成情報
	 * @throws Exception 例外処理が発生した場合
	 */
	public CmComponentDto findForComponent(String compcode) throws Exception {
		return getCmComponentDao().findForComponent(compcode);
	}
	
	/**
	 * 分類別権限区分取得(CM_COMPONENT)
	 * @since	0.0.2
	 * @param division 分類
	 * @return コード配列[][]<br>
	 * 			[0]tcode<br>
	 * 			[1]tname<br>
	 * @throws Exception  例外処理が発生した場合
	 */
	public String[][] getDivisionAuthArray(String division) throws Exception {
		// コードの取得
		List<CmComponentDto> list = getCmComponentDao().findForAvailable(division);
		String[][] aryCode = new String[list.size()][2];
		// Stingの配列に格納
		for (int i = 0; i < aryCode.length; i++) {
			aryCode[i][0] = list.get(i).getCompCode();
			aryCode[i][1] = list.get(i).getCompName();
		}
		return aryCode;
	}
	
	/**
	 * 分類別権限区分取得(CM_COMPONENT)
	 * @since	0.0.2
	 * @param division 分類
	 * @return コード配列[][]<br>
	 * 			[0]tcode<br>
	 * 			[1]tname<br>
	 * @throws Exception  例外処理が発生した場合
	 */
	public String[][] getDivisionAuthAllArray(String division) throws Exception {
		// コードの取得
		List<CmComponentDto> list = getCmComponentDao().findForCondition(division);
		String[][] aryCode = new String[list.size()][2];
		// Stingの配列に格納
		for (int i = 0; i < aryCode.length; i++) {
			aryCode[i][0] = list.get(i).getCompCode();
			aryCode[i][1] = list.get(i).getCompName();
		}
		return aryCode;
	}
	
	/**
	 * 閲覧権限判断（所属部署のみ）
	 * @since	0.0.3
	 * @param dto	対象DTO
	 * @return
	 * <p>
	 * 閲覧権限が所属部署のみの場合true、そうでない場合false
	 * </p>
	 */
	public static boolean isBelongingSection(CmComponentDto dto) {
		if (VariousUtil.chkExistDto(dto)) {
			return dto.getManage() == VariousUtil.getManageCode()[0];
		}
		return false;
	}
	
	/**
	 * 閲覧権限判断（選択部署のみ）
	 * @since	0.0.3
	 * @param dto	対象DTO
	 * @return
	 * <p>
	 * 閲覧権限が選択部署のみの場合true、そうでない場合false
	 * </p>
	 */
	public static boolean isSelectSection(CmComponentDto dto) {
		if (VariousUtil.chkExistDto(dto)) {
			return dto.getManage() == VariousUtil.getManageCode()[1];
		}
		return false;
	}
	
	/**
	 * 閲覧権限判断（全部署）
	 * @since	0.0.3
	 * @param dto	対象DTO
	 * @return
	 * <p>
	 * 閲覧権限が全部署の場合true、そうでない場合false
	 * </p>
	 */
	public static boolean isAllSection(CmComponentDto dto) {
		if (VariousUtil.chkExistDto(dto)) {
			return dto.getManage() == VariousUtil.getManageCode()[2];
		}
		return false;
	}
	
}
