1
2
3
4
5
6
7
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
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 }