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 }