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