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 }