View Javadoc

    1   /*
    2    * "Peko" Visual Novel System
    3    *
    4    * All Rights Reserved.
    5    * (c) Copyright 2002 by Tsukuba Bunko.
    6    *
    7    * $Id: MessageID.java,v 1.1 2005/07/11 12:49:19 ppoi Exp $
    8    */
    9   package tsukuba_bunko.peko;
    10
    11  import	java.text.MessageFormat;
    12
    13  import	tsukuba_bunko.peko.resource.ResourceManager;
    14
    15
    16  /***
    17   * メッセージ ID です。
    18   * @author	$Author: ppoi $
    19   * @version	$Revision: 1.1 $
    20   */
    21  public class MessageID	{
    22
    23  	/***
    24  	 * メッセージリソースの prefix
    25  	 */
    26  	public static final String	RID_PREFIX = "peko.message.";
    27
    28  	/***
    29  	 * 出力メッセージのテンプレート / {0}:メッセージ ID {1}:メッセージ
    30  	 */
    31  	protected static final MessageFormat	TEMPLATE_MESSAGE = new MessageFormat( "[{0}] {1}" );
    32
    33  	/***
    34  	 * メッセージリソースが存在しない場合のメッセージ
    35  	 */
    36  	protected static final String	NULL_MESSAGE = "********** NO MESSAGE **********";
    37
    38
    39  	/***
    40  	 * メッセージ ID
    41  	 */
    42  	private String	_messageID = null;
    43
    44  	/***
    45  	 * デフォルトのメッセージ
    46  	 */
    47  	private Object	_defaultMessage = null;
    48
    49
    50  	/***
    51  	 * <code>MessageID</code> のインスタンスを生成します。
    52  	 * @param	messageID	メッセージ ID
    53  	 */
    54  	public MessageID( String messageID )
    55  	{
    56  		this( messageID, "***** message missing *****" );
    57  	}
    58
    59  	/***
    60  	 * <code>MessageID</code> のインスタンスを生成します。
    61  	 * @param	messageID	メッセージ ID
    62  	 * @param	defaultMessage	デフォルトのメッセージ
    63  	 */
    64  	public MessageID( String messageID, Object defaultMessage )
    65  	{
    66  		super();
    67  		_messageID = messageID;
    68  		_defaultMessage = defaultMessage;
    69  	}
    70
    71
    72  	/***
    73  	 * メッセージ ID を取得します。
    74  	 * @return	メッセージ ID
    75  	 */
    76  	public String getMessageID()
    77  	{
    78  		return _messageID;
    79  	}
    80
    81  	/***
    82  	 * メッセージを取得します。
    83  	 * @return	メッセージ文字列
    84  	 */
    85  	public String getMessage()
    86  	{
    87  		ResourceManager	resources = ResourceManager.getInstance();
    88  		Object	message = null;
    89  		if( _defaultMessage == null )	{
    90  			message = resources.getResource( MessageID.RID_PREFIX + _messageID );
    91  			if( message == null )	{
    92  				message = MessageID.NULL_MESSAGE;
    93  			}
    94  		}
    95  		else	{
    96  			message = resources.getResource( MessageID.RID_PREFIX + _messageID, true );
    97  			if( message == null )	{
    98  				message = _defaultMessage;
    99  			}
    100 		}
    101
    102 		String	messageStr = null;
    103 		if( message instanceof String )	{
    104 			messageStr = (String)message;
    105 		}
    106 		else	{
    107 			messageStr = message.toString();
    108 		}
    109
    110 		return MessageID.TEMPLATE_MESSAGE.format( new Object[]{_messageID, messageStr} );
    111 	}
    112
    113 	/***
    114 	 * メッセージを取得します。
    115 	 * @param	params	メッセージに埋め込むパラメータ
    116 	 * @return	メッセージ文字列
    117 	 */
    118 	public String getMessage( Object[] params )
    119 	{
    120 		ResourceManager	resources = ResourceManager.getInstance();
    121 		Object	message = null;
    122 		if( _defaultMessage == null )	{
    123 			message = resources.getResource( MessageID.RID_PREFIX + _messageID );
    124 			if( message == null )	{
    125 				message = MessageID.NULL_MESSAGE;
    126 			}
    127 		}
    128 		else	{
    129 			message = resources.getResource( MessageID.RID_PREFIX + _messageID, true );
    130 			if( message == null )	{
    131 				message = _defaultMessage;
    132 			}
    133 		}
    134
    135 		String	messageStr = null;
    136 		if( message instanceof MessageFormat )	{
    137 			messageStr = ((MessageFormat)message).format( params );
    138 		}
    139 		else if( message instanceof String )	{
    140 			messageStr = MessageFormat.format( (String)message, params );
    141 		}
    142 		else	{
    143 			messageStr = message.toString();
    144 		}
    145
    146 		return MessageID.TEMPLATE_MESSAGE.format( new Object[]{_messageID, messageStr} );
    147 	}
    148
    149
    150 //
    151 //	Object の実装
    152 //
    153 	public String toString()
    154 	{
    155 		return _messageID;
    156 	}
    157
    158 	public int hashCode()
    159 	{
    160 		return _messageID.hashCode();
    161 	}
    162
    163 	public boolean equals( Object obj )
    164 	{
    165 		if( obj instanceof MessageID )	{
    166 			return _messageID.equals( ((MessageID)obj)._messageID );
    167 		}
    168 		else	{
    169 			return false;
    170 		}
    171 	}
    172 }