001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.hayabusa.taglib;
017
018 import org.opengion.hayabusa.common.HybsSystemException;
019 import org.opengion.hayabusa.resource.LabelInterface;
020 import org.opengion.fukurou.util.StringUtil;
021
022 import static org.opengion.fukurou.util.StringUtil.nval ;
023
024 /**
025 * 画面にメãƒ?‚»ージリソースã‚?ƒ©ベルリソース等ã?メãƒ?‚»ージを表示させるタグですã?
026 *
027 * msg 属æ?に メãƒ?‚»ージリソースのキーを与えることでã€?ロケールにあわせたリソースを使用してã€?
028 * 画面に表示しますã?
029 * lbl 属æ?に ラベルリソース のキーを与えることでã€?ロケールにあわせたリソースを使用してã€?
030 * 画面に表示しますã?
031 * 違う値をセãƒ?ƒˆした場合ã?ã€?セãƒ?ƒˆした値がã?そã?まま出力されますã?これは、ロケールã�?
032 * 見つからなかったå?合ã?標準ã?対応方法ですã?
033 * ロケールは、ユーザーæƒ??の lang 属æ?をå?期å?で使用しã? セãƒ?ƒˆされてã�?�ªã�??合ã?ã€?
034 * リクエスト情報のロケールから取得しますã?
035 * msg 属æ?を使用する場合ã?val0 ??val9 までの引数を使用することができますã?これはã€?
036 * メãƒ?‚»ージフォーマットã?、引数 {0} ??{9} に対応して割り付けられますã?
037 * msg 属æ?とlbl 属æ?は同時に使用できませんã€?
038 *
039 * @og.formSample
040 * ●形式ï¼?lt;og:message msg="…" val0=[…] … />
041 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
042 *
043 * ●Tag定義??
044 * <og:message
045 * lbl 【TAG】ラベルリソースのラベルIDを指定しまã�?
046 * language 【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
047 * command 【TAG】コマンãƒ?INSERT,COPY,MODIFY,DELETE)をセãƒ?ƒˆしまã�?
048 * comment 【TAG】コメントをæŒ?®šしまã�?
049 * type 【TAG】タイプを(Label,Short,Tips,Description)からæŒ?®šしまã�?初期値:Label)
050 * val0 【TAG】メãƒ?‚»ージの引数{0}を指定しまã�?
051 * val1 【TAG】メãƒ?‚»ージの引数{1}を指定しまã�?
052 * val2 【TAG】メãƒ?‚»ージの引数{2}を指定しまã�?
053 * val3 【TAG】メãƒ?‚»ージの引数{3}を指定しまã�?
054 * val4 【TAG】メãƒ?‚»ージの引数{4}を指定しまã�?
055 * val5 【TAG】メãƒ?‚»ージの引数{5}を指定しまã�?
056 * val6 【TAG】メãƒ?‚»ージの引数{6}を指定しまã�?
057 * val7 【TAG】メãƒ?‚»ージの引数{7}を指定しまã�?
058 * val8 【TAG】メãƒ?‚»ージの引数{8}を指定しまã�?
059 * val9 【TAG】メãƒ?‚»ージの引数{9}を指定しまã�?
060 * caseKey 【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
061 * caseVal 【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
062 * caseNN 【TAG】指定ã?値がã?null/ゼロæ–?—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
063 * caseNull 【TAG】指定ã?値がã?null/ゼロæ–?—å? の場合ã?、このタグは使用されまã�?初期値:true)
064 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
065 * > ... Body ...
066 * </og:message>
067 *
068 * ●使用ä¾?
069 * <og:message msg="MSG0032" language="ja" />
070 *
071 * msg : MessageResource.properties のキー
072 * language : ロケール(オプション)
073 *
074 * 例ï¼?
075 * <og:message msg="MSG0032" >検索条件</og:message>
076 *
077 * BODY 部åˆ??、無視されますã?コメント等に使用できますã?
078 * HTMLファイルには、コメント部åˆ??出力されませんã€?
079 *
080 * @og.group 画面部å“?
081 *
082 * @version 4.0
083 * @author Kazuhiko Hasegawa
084 * @since JDK5.0,
085 */
086 public class MessageTag extends CommonTagSupport {
087 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
088 private static final String VERSION = "5.2.2.0 (2010/11/01)" ;
089
090 private static final long serialVersionUID = 522020101101L ;
091
092 private String comment = null;
093 private String[] values = null;
094 // 4.0.0 (2005/01/31) メãƒ?‚»ージの種類をæŒ?®šできるようにしますã?
095 private String type = "Label" ; // Label,Short,Tips,Description が指定できますã?
096 private String cmdMsg = null;
097
098 private static final String[] TYPE_LIST = new String[] { "Label","Short","Tips","Description" };
099
100 /**
101 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
102 *
103 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
104 *
105 * @return 後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
106 */
107 @Override
108 public int doStartTag() {
109 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
110 if( useTag() ) {
111 return( EVAL_BODY_BUFFERED ); // Body を評価するã€? extends BodyTagSupport æ™?
112 }
113 return ( SKIP_BODY ); // Body を評価しなã�?
114 }
115
116 /**
117 * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
118 *
119 * @og.rev 3.1.1.0 (2003/03/28) ボディのå†?®¹を取得するå?ç�?‚’、CommonTagSupport で行うã€?
120 *
121 * @return 後続å?ç�??æŒ?¤º(SKIP_BODY)
122 */
123 @Override
124 public int doAfterBody() {
125 String str = getBodyString();
126
127 if( str != null && str.length() > 0 ) {
128 comment = StringUtil.htmlFilter( str );
129 }
130
131 return(SKIP_BODY);
132 }
133
134 /**
135 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
136 *
137 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
138 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
139 *
140 * @return 後続å?ç�??æŒ?¤º
141 */
142 @Override
143 public int doEndTag() {
144 debugPrint(); // 4.0.0 (2005/02/28)
145 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
146 if( useTag() ) {
147 jspPrint( makeTag() );
148 }
149 return(EVAL_PAGE);
150 }
151
152 /**
153 * タグリブオブジェクトをリリースしますã?
154 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
155 *
156 * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
157 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
158 *
159 */
160 @Override
161 protected void release2() {
162 super.release2();
163 comment = null;
164 values = null;
165 type = "Label" ; // Label,Short,Tips,Description が指定できますã?
166 cmdMsg = null;
167 }
168
169 /**
170 * 表示用のæ–?—å?を指定しますã?
171 *
172 * @og.rev 4.0.0.0 (2005/01/31) タイプ別メãƒ?‚»ージæƒ??を返しますã?
173 * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ージリソース統å�? getResource().getMessage > getResource().getLabel )
174 *
175 * @return 変換後ã?æ–?—å?
176 */
177 private String makeTag() {
178 String val = null;
179
180 LabelInterface label = getLabelInterface();
181
182 char ch = type.charAt( 0 ); // Label,Short,Tips,Description
183 if( label != null ) {
184 switch( ch ) {
185 case 'L': val = label.getMessage( values ); break;
186 case 'S': val = label.getShortLabel(); break;
187 case 'T': val = label.getLongLabel(); break;
188 case 'D': val = label.getDescription(); break;
189 default : break;
190 }
191 }
192 else {
193 if( cmdMsg != null ) {
194 // cmdMsg = INSERT,COPY,MODIFY,DELETE,null
195 // val = getResource().getMessage( cmdMsg );
196 val = getResource().getLabel( cmdMsg );
197 }
198 else {
199 val = comment;
200 }
201 }
202
203 return val;
204 }
205
206 /**
207 * 【TAG】コメントをæŒ?®šしますã?
208 *
209 * @og.tag
210 * msg 属æ?でメãƒ?‚»ージリソースから読み取りますが,開発途中で
211 * リソース登録を済ましてã�?�ªã�?ж態でコメントを入れる場合にã€?
212 * 直接コメントをかけるよã�?�«しますã?
213 *
214 * @og.rev 2.2.0.0 (2002/12/17) 中国èª?国際化)対å¿?エンコードã?取得方法変更
215 * @og.rev 3.0.0.0 (2002/12/25) StringUtil#changeString å»?¢
216 *
217 * @param cmnt コメント文字å?
218 */
219 public void setComment( final String cmnt ) {
220 comment = cmnt;
221 }
222
223 /**
224 * 【TAG】タイプを(Label,Short,Tips,Description)からæŒ?®šしまã�?初期値:Label)ã€?
225 *
226 * @og.tag
227 * タイプã?、ラベル?�メãƒ?‚»ージリソースのどのæƒ??を取得したいかをæŒ?®šできますã?
228 * 従来のラベル?�メãƒ?‚»ージは、Label に相当しますã?
229 * なおã?æŒ?®šã?、それぞれã?頭æ–??'L','S','T','D')のみでも可能ですã?
230 * 初期値はã€?Label" ですã?
231 * ・Label : ラベル?�メãƒ?‚»ージ表示
232 * ・Short : 表形式で使用する短ã�?ƒ©ベル表示
233 * ・Tips : ラベルの上にTips表示
234 * ・Description : 概要説明を表示
235 *
236 * @og.rev 4.0.0.0 (2005/01/31) 新規登録
237 *
238 * @param tp タイプ文字å?('L','S','T','D','B')
239 */
240 public void setType( final String tp ) {
241 type = nval( getRequestParameter( tp ),type );
242
243 char ch = type.charAt( 0 ); // Label,Short,Tips,Description
244
245 if( "LSTD".indexOf( ch ) < 0 ) {
246 String errMsg = "type に、指定不可能なæ–?—が設定されました。type=[" + type
247 + "] TYPE_LIST=[" + StringUtil.array2csv( TYPE_LIST ) + "]";
248 throw new HybsSystemException( errMsg );
249 }
250 }
251
252 /**
253 * 【TAG】メãƒ?‚»ージの引数{0}を指定しますã?
254 *
255 * @og.tag メãƒ?‚»ージの引数を指定しますã?
256 *
257 * @param value メãƒ?‚»ージの引数
258 */
259 public void setVal0( final String value ) { setValues( 0, value ); }
260
261 /**
262 * 【TAG】メãƒ?‚»ージの引数{1}を指定しますã?
263 *
264 * @og.tag メãƒ?‚»ージの引数を指定しますã?
265 *
266 * @param value メãƒ?‚»ージの引数
267 */
268 public void setVal1( final String value ) { setValues( 1, value ); }
269
270 /**
271 * 【TAG】メãƒ?‚»ージの引数{2}を指定しますã?
272 *
273 * @og.tag メãƒ?‚»ージの引数を指定しますã?
274 *
275 * @param value メãƒ?‚»ージの引数
276 */
277 public void setVal2( final String value ) { setValues( 2, value ); }
278
279 /**
280 * 【TAG】メãƒ?‚»ージの引数{3}を指定しますã?
281 *
282 * @og.tag メãƒ?‚»ージの引数を指定しますã?
283 *
284 * @param value メãƒ?‚»ージの引数
285 */
286 public void setVal3( final String value ) { setValues( 3, value ); }
287
288 /**
289 * 【TAG】メãƒ?‚»ージの引数{4}を指定しますã?
290 *
291 * @og.tag メãƒ?‚»ージの引数を指定しますã?
292 *
293 * @param value メãƒ?‚»ージの引数
294 */
295 public void setVal4( final String value ) { setValues( 4, value ); }
296
297 /**
298 * 【TAG】メãƒ?‚»ージの引数{5}を指定しますã?
299 *
300 * @og.tag メãƒ?‚»ージの引数を指定しますã?
301 *
302 * @param value メãƒ?‚»ージの引数
303 */
304 public void setVal5( final String value ) { setValues( 5, value ); }
305
306 /**
307 * 【TAG】メãƒ?‚»ージの引数{6}を指定しますã?
308 *
309 * @og.tag メãƒ?‚»ージの引数を指定しますã?
310 *
311 * @param value メãƒ?‚»ージの引数
312 */
313 public void setVal6( final String value ) { setValues( 6, value ); }
314
315 /**
316 * 【TAG】メãƒ?‚»ージの引数{7}を指定しますã?
317 *
318 * @og.tag メãƒ?‚»ージの引数を指定しますã?
319 *
320 * @param value メãƒ?‚»ージの引数
321 */
322 public void setVal7( final String value ) { setValues( 7, value ); }
323
324 /**
325 * 【TAG】メãƒ?‚»ージの引数{8}を指定しますã?
326 *
327 * @og.tag メãƒ?‚»ージの引数を指定しますã?
328 *
329 * @param value メãƒ?‚»ージの引数
330 */
331 public void setVal8( final String value ) { setValues( 8, value ); }
332
333 /**
334 * 【TAG】メãƒ?‚»ージの引数{9}を指定しますã?
335 *
336 * @og.tag メãƒ?‚»ージの引数{9}を指定しますã?
337 *
338 * @param value メãƒ?‚»ージの引数
339 */
340 public void setVal9( final String value ) { setValues( 9, value ); }
341
342 /**
343 * メãƒ?‚»ージの引数を指定しますã?
344 *
345 * @param no メãƒ?‚»ージの引数の配å?番号
346 * @param value メãƒ?‚»ージの引数
347 */
348 private void setValues( final int no,final String val ) {
349 if( values == null ) { values = new String[10]; }
350 values[no] = getRequestParameter( val );
351 }
352
353 /**
354 * 【TAG】コマンãƒ?INSERT,COPY,MODIFY,DELETE)をセãƒ?ƒˆしますã?
355 *
356 * @og.tag
357 * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
358 * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
359 * コマンãƒ?INSERT,COPY,MODIFY,DELETE)に対応したメãƒ?‚»ージを表示しますã?
360 * INSERT : MSG0044 追åŠ??ç�?‚’行いますã?
361 * COPY : MSG0045 è¤??処ç�?‚’行いますã?
362 * MODIFY : MSG0046 変更処ç�?‚’行いますã?
363 * DELETE : MSG0047 削除処ç�?‚’行いますã?
364 *
365 * なおã?command によるメãƒ?‚»ージの自動選択ã?、msg , lbl ともにセãƒ?ƒˆされてã�?�ªã�?
366 * 場合にのみ有効になりますã?
367 *
368 * @og.rev 4.0.0.0 (2006/11/31) 新規登録
369 *
370 * @param cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?—å?)
371 */
372 public void setCommand( final String cmd ) {
373 String cmd2 = nval( getRequestParameter( cmd ),null );
374 if( "INSERT".equalsIgnoreCase( cmd2 ) ) { cmdMsg = "MSG0044"; }
375 else if( "COPY".equalsIgnoreCase( cmd2 ) ) { cmdMsg = "MSG0045"; }
376 else if( "MODIFY".equalsIgnoreCase( cmd2 ) ) { cmdMsg = "MSG0046"; }
377 else if( "DELETE".equalsIgnoreCase( cmd2 ) ) { cmdMsg = "MSG0047"; }
378 else { cmdMsg = null; }
379 }
380
381 /**
382 * こã?オブジェクトã?æ–?—å?表現を返しますã?
383 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
384 *
385 * @return こã?クラスのæ–?—å?表現
386 */
387 @Override
388 public String toString() {
389 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
390 .println( "VERSION" ,VERSION )
391 .println( "comment" ,comment )
392 .println( "values" ,values )
393 .println( "type" ,type )
394 .println( "TYPE_LIST" ,TYPE_LIST )
395 .println( "Other..." ,getAttributes().getAttribute() )
396 .fixForm().toString() ;
397 }
398 }