View Javadoc

    1   /*
    2    * Common Library for TBAS Softwares
    3    *
    4    * All Rights Reserved.
    5    * (c) Copyright 2002 by Tsukuba Bunko.
    6    *
    7    * $Id: DeserializerMapping.java,v 1.1 2005/07/11 12:49:18 ppoi Exp $
    8    */
    9   package tsukuba_bunko.resource;
    10
    11  import	java.util.Enumeration;
    12  import	java.util.Map;
    13  import	java.util.ResourceBundle;
    14
    15
    16  /***
    17   * データ型名と <code>ResourceDeserializer</code> のマップを管理します。このクラスは thread-safe ではありませんので、malti-thread
    18   * 環境で使用する場合は、同期の制御を行ってください。
    19   * @author	$Author: ppoi $
    20   * @version	$Revision: 1.1 $
    21   */
    22  public class DeserializerMapping	{
    23
    24  	/***
    25  	 * データ型名 - ResourceDeserializer マップ
    26  	 */
    27  	private Map	_registry = new java.util.HashMap( 89 );
    28
    29
    30  	/***
    31  	 * <code>DeserializerMapping</code> のインスタンスを作成します。
    32  	 */
    33  	public DeserializerMapping()
    34  	{
    35  		super();
    36  	}
    37
    38
    39  	/***
    40  	 * データ型 <code>dataType</code> に <code>ResourceDeserializer</code> クラス
    41  	 * <code>deserializerClass</code> を関連づけます。
    42  	 * @param	typeName	データ型名
    43  	 * @param	deserializer	使用する <code>ResourceDeserializer</code>
    44  	 * @exception	IllegalArgumentException	<code>deserializerClass</code> が妥当な <code>ResourceDeserializer</code> サブクラスではない場合
    45  	 */
    46  	public void register( String typeName, ResourceDeserializer deserializer )
    47  	{
    48  		deserializer.setDeserializerMapping( this );
    49  		deserializer.setTypeName( typeName );
    50  		_registry.put( typeName, deserializer );
    51  	}
    52
    53  	/***
    54  	 * データ型 <code>typeName</code> に関連づけられた <code>ResourceDeserializer</code> クラスを削除します。
    55  	 * @param	typeName
    56  	 */
    57  	public void unregister( String typeName )
    58  	{
    59  		_registry.remove( typeName );
    60  	}
    61
    62  	/***
    63  	 * <code>dataType</code> に関連づけられた <code>ResourceDeserializer</code> を取得します。
    64  	 * @param	dataType	データ型名
    65  	 * @return	関連づけられている <code>ResourceDeserializer</code>
    66  	 * @exception	IllegalStateException	<code>ValueDeserialzier</code> の取得に失敗した場合
    67  	 */
    68  	public ResourceDeserializer getResourceDeserializer( String dataType )
    69  	{
    70  		return (ResourceDeserializer)_registry.get( dataType );
    71  	}
    72
    73  	/***
    74  	 * 指定された reosurce bundle を使用して <code>DeserializerMapping</code> のインスタンスを作成します。
    75  	 * @param	bundleName	ResourceBundle のベースクラス名
    76  	 * @return	作成された <code>DeserializerMapping</code> のインスタンス
    77  	 */
    78  	public static DeserializerMapping newInstance( String bundleName )
    79  	{
    80  		DeserializerMapping	mapping = new DeserializerMapping();
    81
    82  		ResourceBundle	source = ResourceBundle.getBundle( bundleName );
    83  		ClassLoader	cl = DeserializerMapping.class.getClassLoader();
    84
    85  		Enumeration	keys = source.getKeys();
    86  		String	key = null;
    87  		while( keys.hasMoreElements() )	{
    88  			key = (String)keys.nextElement();
    89  			String	className = source.getString( key );
    90  			try	{
    91  				mapping.register( key, (ResourceDeserializer)cl.loadClass(className).newInstance() );
    92  			}
    93  			catch( Exception e )	{
    94  				System.err.println( "[libtbas] ERROR : illegal class \"" + className + "\"" );
    95  				e.printStackTrace();
    96  			}
    97  		}
    98
    99  		return mapping;
    100 	}
    101
    102 	/***
    103 	 * リソースで指定された内容から <code>DeserializerMapping</code> のインスタンスを作成します。
    104 	 * @return	作成された <code>DeserializerMapping</code> のインスタンス
    105 	 */
    106 	public static DeserializerMapping newInstance()
    107 	{
    108 		return newInstance( System.getProperty("libtbas.resource.mapping", "tsukuba_bunko.resource.mapping") );
    109 	}
    110 }