/*
 * @(#)SSOConfig.java
 *
 * Copyright (C) 2005 Infocity Inc. All Rights Reserved.
 */
package info.dragonlady.sso;

import info.dragonlady.sso.util.ResourceParseException;
import info.dragonlady.sso.util.ResourceUtils;

import java.util.ArrayList;
import java.util.List;

import org.w3c.dom.NodeList;


/**
 * シングルサインオン機能で使用する設定リソースアクセスクラス
 * 
 * @author Hiroshi.Ebata(INFOCITY)
 * @version $Revision: 1.2 $ $Date: 2005/11/15 18:12:24 $
 */
public class SSOConfig {

	/**
	 * リソースパス
	 */
	private static final String resourcePath = "resources/sso_config.xml";

	/**
	 * プロバイダ名取得
	 * ※ソースID生成に使用
	 * 
	 * @return String プロバイダ名
	 * @throws ResourceParseException
	 */
	public static final String getProvider() throws ResourceParseException {
		String expression = "sso/provider";
		return ResourceUtils.getString(SSOConfig.resourcePath, expression);
	}

	/**
	 * アサーション発行元名取得
	 * 
	 * @return String アサーション発行元名
	 * @throws ResourceParseException
	 */
	public static final String getIssuer() throws ResourceParseException {
		String expression = "sso/issuer";
		return ResourceUtils.getString(SSOConfig.resourcePath, expression);
	}

	/**
	 * SAMLアサーションに含める属性名のリストを取得
	 * 
	 * @return List アサーションに含める属性名のリスト
	 * @throws ResourceParseException
	 */
	public static final List getSAMLAttributeList() throws ResourceParseException {
		String expression = "sso/saml_attribute/name";
		NodeList nodeList = ResourceUtils.getNodeSet(SSOConfig.resourcePath, expression);
		List list = new ArrayList();
		for(int i = 0; i < nodeList.getLength(); i++) {
			list.add(ResourceUtils.getTextContent(nodeList.item(i)));
		}
		return list;
	}

	/**
	 * アサーション有効期限（秒）を取得
	 * 
	 * @return Integer アサーション有効期限（秒）
	 * @throws ResourceParseException
	 */
	public static final Integer getAssertionLife() throws ResourceParseException {
		String expression = "sso/assertion_life";
		return new Integer(ResourceUtils.getString(SSOConfig.resourcePath, expression));
	}

	/**
	 * 認証オーソリティクラス名取得。
	 * 
	 * @return String 認証オーソリティクラス名
	 * @throws ResourceParseException
	 */
	public static final String getAuthenticationAuthorityClass() throws ResourceParseException {
		String expression = "sso/authority/authentication-class";
		return ResourceUtils.getString(SSOConfig.resourcePath, expression);
	}

	/**
	 * 属性オーソリティクラス名取得。
	 * 
	 * @return String 属性オーソリティクラス名
	 * @throws ResourceParseException
	 */
	public static final String getAttributeAuthorityClass() throws ResourceParseException {
		String expression = "sso/authority/attribute-class";
		return ResourceUtils.getString(SSOConfig.resourcePath, expression);
	}

	/**
	 * ポリシー決定点クラス名取得。
	 * 
	 * @return String ポリシー決定点クラス名
	 * @throws ResourceParseException
	 */
	public static final String getPolicyDecisionPointClass() throws ResourceParseException {
		String expression = "sso/authority/policy-decision-class";
		return ResourceUtils.getString(SSOConfig.resourcePath, expression);
	}

	/**
	 * ポリシー実行点クラス名取得。
	 * 
	 * @return String ポリシー実行点クラス名
	 * @throws ResourceParseException
	 */
	public static final String getPolicyEnforcementPointClass() throws ResourceParseException {
		String expression = "sso/policy-enforcement-class";
		return ResourceUtils.getString(SSOConfig.resourcePath, expression);
	}

	/**
	 * ID管理クラス名取得。
	 * 
	 * @return String ID管理クラス名
	 * @throws ResourceParseException
	 */
	public static final String getIDProviderClass() throws ResourceParseException {
		String expression = "sso/idprovider-class";
		return ResourceUtils.getString(SSOConfig.resourcePath, expression);
	}

}
