/*
 * Common Library for TBAS Softwares
 * Language: Java
 *
 * All Rights Reserved.
 * (c) Copyright 2002 by Tsukuba Bunko.
 *
 * $Id: Resources.java,v 1.2 2003/09/11 10:30:07 ppoi Exp $
 */
package tsukuba_bunko.resource;

import	java.io.IOException;

import	java.net.URL;

import	java.util.Map;

import	javax.xml.parsers.ParserConfigurationException;

import	org.xml.sax.SAXException;


/**
 * リソースとリソースIDの関連を管理します。
 * @author	$Author: ppoi $
 * @version	$Revision: 1.2 $
 */
public class Resources	{

	/**
	 * リソース
	 */
	private Map	_resources = null;


	/**
	 * <code>Resources</code> のインスタンスを作成します。
	 */
	public Resources()
	{
		_resources = new java.util.HashMap( 89 );
	}


	/**
	 * リソースを取得します。
	 * @param	resourceName	リソース名
	 * @return	リソース
	 */
	public Object getResource( String resourceName )
	{
		return _resources.get( resourceName );
	}

	/**
	 * リソースを設定します。{@link #setEmutable()} 呼び出し後にこのメソッドを呼び出した場合、{@link java.util.UnsupportedOperationException} が throw されます。
	 * @param	resourceName	リソース名
	 * @param	resource	リソース
	 * @throws	UnsupportedOperationException	{@link #setEmutable()} 呼び出し後にこのメソッドを呼び出した場合
	 */
	public final void setResource( String resourceName, Object resource )
	{
		_resources.put( resourceName, resource );
	}

	/**
	 * この <code>Resources</code> が管理する全リソースIDを取得します。
	 * @return	リソースIDの配列
	 */
	public String[] getResourceIDs()
	{
		return (String[])_resources.keySet().toArray( new String[_resources.size()] );
	}

	/**
	 * リソースファイルからリソースをロードし、<code>Resources</code> のインスタンスを作成します.
	 * @param	resourceURL	リソースファイルの URL
	 * @return	生成された <code>Resources</code>
	 * @throws	IllegalResourceException	リソースファイルが不正な場合
	 * @throws	ParserConfigurationException	JAXP が正常に構成されていない場合
	 * @throws	SAXException	JAXP が正常に構成されていない場合
	 * @throws	IOException	I/O エラーが発生した場合
	 */
	public static Resources newInstance( URL resourceURL )
		throws IllegalResourceException, ParserConfigurationException, SAXException, IOException
	{
		Resources	resources = new Resources();
		ResourceLoader	loader = new ResourceLoader();
		loader.loadResource( resourceURL, resources );
		return resources;
	}
}