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.fukurou.util.StringUtil ;
019 import static org.opengion.fukurou.util.StringUtil.nval ;
020
021 /**
022 * {@XXXX} 変数の特殊??、動?実行するタグです?
023 *
024 * こ?タグの目??、{@XXXX} 変数の使?をドキュメント化することにあります?
025 * 通常は、動?編???行う??ありません?
026 *
027 * 通常のリクエスト変数は、{@XXXX} で取り出すことが可能です?ところが?
028 * {@SYS.XXXX} 、{@USER.XXXX} 、{@GUI.XXXX}?などのシス?予??
029 * 変数を取り?す?合に、XXXX 部?動的に変更することは出来ません?
030 * こ?タグは、簡易的に、XXXX を引数に取り、動?取り出すことができるようにします?
031 *
032 * @og.formSample
033 * ●形式?
034 * <og:requestValue
035 * sys = "XXXX" シス?パラメータ の値を取?
036 * user = "ID" UserInfoオブジェクト?値を取?og:userInfo)
037 * gui = "KEY" GUIInfoオブジェクト?値を取?
038 * mem = "XXXX" REQUEST_CACHE の値を取?
039 * lbl = "XXXX" ラベルリソースの値を取?
040 * msg = "XXXX" メ?ージリソースの値を取?
041 * db = "COUNT" ??タベ?ス実行結果を取?
042 * session = "XXXX" session Attribute の値を取?
043 * date = "XXXX" 日付関係?値を取?
044 * nvar = "XXXX" Unicode??の値?HTML のエスケープ記号(&#xZZZZ;)に変換します?
045 * >
046 * ●body?な?
047 *
048 * ●Tag定義??
049 * <og:requestValue
050 * sys 【TAG】{@SYS.XXXX} と同等?シス?パラメータ の値を取得しま?
051 * user 【TAG】{@USER.XXXX} と同等?UserInfoオブジェクト?値を取得しま?
052 * gui 【TAG】{@GUI.XXXX} と同等?GUIInfoオブジェクト?値を取得しま?
053 * mem 【TAG】{@MEM.XXXX} と同等?REQUEST_CACHE の値を取得しま?
054 * lbl 【TAG】{@LBL.XXXX} と同等?ラベルリソースの値を取得しま?
055 * db 【TAG】データベ?ス実行結果を取得しま?
056 * session 【TAG】session Attribute の値を取得しま?
057 * date 【TAG】日付関係?値を取得しま?
058 * nvar 【TAG】Unicode??の値?HTML のエスケープ記号(&#xZZZZ;)に変換しま?
059 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
060 * />
061 *
062 *
063 * @og.rev 3.8.0.2 (2005/07/11) 新規作?
064 * @og.group 画面部?
065 *
066 * @version 0.9.0 2000/10/17
067 * @author Kazuhiko Hasegawa
068 * @since JDK5.0,
069 */
070 public class RequestValueTag extends CommonTagSupport {
071 //* こ?プログラ??VERSION??を設定します? {@value} */
072 private static final String VERSION = "4.0.0.0 (2007/10/18)" ;
073
074 private static final long serialVersionUID = 400020071018L ;
075
076 private String sys = null;
077 private String user = null;
078 private String gui = null;
079 private String mem = null;
080 private String lbl = null;
081 // private String msg = null;
082 private String db = null;
083 private String session = null;
084 private String date = null;
085 private String nvar = null;
086
087 /**
088 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
089 *
090 * @og.rev 4.0.0.0 (2007/10/18) メ?ージリソース統? getResource().getMessage ?getResource().getLabel )
091 *
092 * @return 後続????
093 */
094 @Override
095 public int doEndTag() {
096 debugPrint(); // 4.0.0 (2005/02/28)
097
098 StringBuilder buf = new StringBuilder();
099
100 if( sys != null ) {
101 buf.append( sys( sys.trim() ) );
102 }
103 else if( user != null ) {
104 buf.append( getUserInfo( user.trim() ) );
105 }
106 else if( gui != null ) {
107 buf.append( getGUIInfoAttri( gui.trim() ) );
108 }
109 else if( mem != null ) {
110 buf.append( getRequestCacheData( mem.trim() ) );
111 }
112 else if( lbl != null ) {
113 buf.append( getLabel( lbl.trim() ) );
114 }
115 // else if( msg != null ) {
116 // buf.append( getMessage( msg.trim() ) );
117 // }
118 else if( db != null ) {
119 buf.append( getRequestParameter( "{@DB." + db.trim() + "}" ) );
120 }
121 else if( session != null ) {
122 buf.append( getSessionAttribute( session.trim() ) );
123 }
124 else if( date != null ) {
125 buf.append( getDateFormat( date.trim() ) );
126 }
127 else if( nvar != null ) {
128 buf.append( StringUtil.getUnicodeEscape( getRequestValue( nvar.trim() ) ) );
129 }
130
131 jspPrint( buf.toString() );
132
133 return(EVAL_PAGE); // ペ?ジの残りを評価する?
134 }
135
136 /**
137 * タグリブオブジェクトをリリースします?
138 *
139 * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
140 *
141 */
142 @Override
143 protected void release2() {
144 super.release2();
145 sys = null;
146 user = null;
147 gui = null;
148 mem = null;
149 lbl = null;
150 // msg = null;
151 db = null;
152 session = null;
153 date = null;
154 nvar = null;
155 }
156
157 /**
158 * 【TAG】{@SYS.XXXX} と同等?シス?パラメータ の値を取得します?
159 *
160 * @og.tag
161 * 本来は、シス?パラメータ の値を取得できますが、シス??共有??
162 * 取得できるように機?追?て?す?
163 * また?ユーザー個別にシス?パラメータを変更できます?こ?取得??
164 * シス?パラメータとして取得します?(値はユーザー個別値を返します?)
165 *
166 * SERVER_NAME こ?Tomcatが実行して?サーバ?? localhost ?
167 * SERVER_URL Portも含?RLアドレス http://localhost:8823/
168 * CONTEXT_URL 実行して?コン?スト?URLアドレス http://localhost:8823/dbdef2/
169 * REAL_PATH / ルートに対応する物?ィレクトリ d:/webapps/dbdef2/ ?
170 * CONTEXT_NAME コン?スト名(webapps 直下?仮想フォル?) dbdef ?
171 * DATE YMDH とほぼ同じですが?yyyy/MM/dd HH:mm:ss' の形式で取得できます?
172 * 任? ユーザーパラメータ(GE16) の値/シス?パラメータ(GE12)の値を取?
173 *
174 * {@SYS.COOKIE.カラ?}で、Cookie の読み込みを行えます?
175 * 上記以外に、予?や、シス?パラメータ の値の読取が可能です?
176 *
177 * @param val キャ?ュするサブキー
178 */
179 public void setSys( final String val ) {
180 sys = nval( getRequestParameter( val ),sys );
181 }
182
183 /**
184 * 【TAG】{@USER.XXXX} と同等?UserInfoオブジェクト?値を取得します?
185 *
186 * @og.tag
187 * ユーザーパラメータとは異なります?
188 *
189 * 以下?値は UserInfo オブジェクト??から取得します?
190 *
191 * ・JNAME ユーザー日本語名称
192 * ・ID ユーザー??
193 * ・IDNO USER.ID が5Byte以上?時?み先??文字を除?ユーザー??
194 * ・INFO ユーザー??(ユーザーID?日本語名称)
195 * ・LANG ??
196 * ・ROLES ロール
197 * ・IPADDRESS IPアドレス
198 * ・LOGINTIME ログイン時刻
199 *
200 * 以下?値はあらかじめ?動的に作?されます?
201 *
202 * ・YMD ?byte の今日のシス?日?
203 * ・YMDH ?4byte の今日のシス?日?
204 *
205 * それ以外?、外部より設定された値です?
206 *
207 * @param val キャ?ュするサブキー
208 */
209 public void setUser( final String val ) {
210 user = nval( getRequestParameter( val ),user );
211 }
212
213 /**
214 * 【TAG】{@GUI.XXXX} と同等?GUIInfoオブジェクト?値を取得します?
215 *
216 * @og.tag
217 * GUIInfo オブジェクトで定義されて?属???を取り?すことが?来ます?
218 * 引数は?XXXX ID" と?状態で受け取ります?(GUI. ははずした形)
219 * XXXXには、画面??(GUIInfo)の属?キーを指定します?IDが指定されな??合??
220 * 実行中の自??身の画面が指定されたことになります?
221 * これは、session 登録? の HybsSystem#GUIINFO_KEY キー の値で取得します?
222 * こ?値は,画面が呼び出される毎に毎回設定されており、リクエスト毎に
223 * ?し直す?があります?
224 *
225 * ID に、画面IDを指定した?合??#064; ?によるリクエスト引数の値を適用できます?
226 * {@GUI.@XXXX ID} ??{@GUI.XXXX @ID} です?(同時?も可能)
227 *
228 * ・KEY 画面ID
229 * ・ADDRESS 実行アドレス
230 * ・REALADDRESS 実行実アドレス
231 * ・SEQUENCE 表示?
232 * ・GROUPS メニュグルー?
233 * ・CLASSIFY メニュ??
234 * ・LEVEL メニュ階層番号
235 * ・LABEL 画面名称
236 * ・NAME 画面名称(=SNAME)
237 * ・SNAME 画面名称(short)
238 * ・LNAME 画面名称(long)
239 * ・ROLES ロールズ
240 * ・MODE アクセスモード?(mr,mw,-r,-w の??)
241 * ・TARGET ターゲ?
242 * ・PARAM 設定?(パラメータ)
243 * ・KBLINK リンク区?
244 * ・DESCRIPTION 概要説?
245 *
246 * @param val 画面??を取り?すキー
247 */
248 public void setGui( final String val ) {
249 gui = nval( getRequestParameter( val ),gui );
250 }
251
252 /**
253 * 【TAG】{@MEM.XXXX} と同等?REQUEST_CACHE の値を取得します?
254 *
255 * @og.tag
256 * 検索時? request ??をキャ?ュして?メモリ上から?を取り?します?
257 * 通常は、query_init.jsp で定義されて? GAMENID付?
258 * リクエストキャ?ュ??を取り?します?
259 *
260 * @param val キャ?ュするサブキー
261 */
262 public void setMem( final String val ) {
263 mem = nval( getRequestParameter( val ),mem );
264 }
265
266 /**
267 * 【TAG】{@LBL.XXXX} と同等?ラベルリソースの値を取得します?
268 *
269 * @og.tag
270 * ラベルリソースのロケールは、ログインユーザーのロケールになります?
271 * これは、{@LBL.XXXX Y} 引数処?おこな?め?、サポ?トメソ?です?
272 * 引数は?XXXX Y" と?状態で受け取ります?(LBL. ははずした形)
273 * ラベルには??常のラベル(Label)以外に、Short,Tips,Comment の??を持って?す?
274 * {@LBL.XXXX Y} の Y に、?のLabel,Short,Tips,Comment の頭??'L','S','T','C')?
275 * ?することで、それぞれ?状態を取得することが可能になります?
276 * Y を指定しな???{@LBL.XXXX}) は?L' が指定された場合と同じ効果があります?
277 * Y は、?頭?1文字で判断して?す?で、{@LBL.XXXX Short}と記述できます?
278 * Y 引数には?#064;で始まるリクエスト引数が指定できます?例えば、{@LBL.XXXX @ZZ}
279 * とすると、ZZ のリクエスト引数の値?Y に適用されます?
280 * ラベルキーそ?も?をパラメータ化することが?来ます?
281 * これは、{@LBL.@XXXX}と?形式になります?引数は、?の説明と同じです?
282 * こ?場合?、XXXX をキーにリクエスト引数の値が?ラベルリソースのキーになります?
283 *
284 * @param val キャ?ュするサブキー
285 */
286 @Override
287 public void setLbl( final String val ) {
288 lbl = nval( getRequestParameter( val ),lbl );
289 }
290
291 /**
292 * 【TAG】{@MSG.XXXX} と同等?メ?ージリソースの値を取得します?
293 *
294 * @og.tag
295 * メ?ージリソースのロケールは、ログインユーザーのロケールになります?
296 * メ?ージリソースでは、{@MSG.XXXX AA @BB #CC} と?引数処?おこな?
297 * 事が可能です?
298 * 引数は?XXXX AA @BB #CC" と?状態で受け取ります?(MSG. ははずした形)
299 * "AA @BB #CC" は、スペ?スで区?れたメ?ージリソースの引数?です?
300 * こ?、引数?には??常??AA)、リクエスト文?@BB)、ラベル??#CC)が指定できます?
301 * ・通常??AA)?そのまま、メ?ージリソースの引数にセ?されます?
302 * ・リクエスト文?@BB)?リクエスト引数に置き換えます?通常、{@BB} ?しますが?
303 * メ?ージパラメータの引数、{@XXXX ??? {@BB} ???} と、?れ子で?できな?め?
304 * {@XXXX ??? @BB ???} と、省略形で?します?よって、引数として??常??
305 * 先?に?@" を使用することは出来ません?
306 * ・ラベル??#CC)?ラベルキーを指定されたと解釈して、??ます?これは?CC"?
307 * キーに、ラベルリソースを検索し?そ??に応じた文字に変換後?メ?ージリソースの
308 * 引数に?します?PL/SQL等で、SET_ERRMSGS プロシージャの引数に、{#CC} ?を
309 * ?して、ラベルリソースを利用できますが、{@XXXX ??? {#CC} ???} と、?れ子で
310 * ?できな?め?{@XXXX ??? #CC ???} と、省略形で?します?
311 * よって、引数として??常??先?に?#" を使用することは出来ません?エスケープ未採用)
312 * メ?ージキーそ?も?をパラメータ化することが?来ます?
313 * これは、{@MSG.@XXXX}と?形式になります?引数は、?の説明と同じです?
314 * こ?場合?、XXXX をキーにリクエスト引数の値が?メ?ージリソースのキーになります?
315 *
316 * @param val キャ?ュするサブキー
317 */
318 // public void setMsg( final String val ) {
319 // msg = nval( getRequestParameter( val ),msg );
320 // }
321
322 /**
323 * 【TAG】データベ?ス実行結果を取得します?
324 *
325 * @og.tag
326 * 検索結果の件数を?"DB.COUNT" キーでリクエストにセ?して?す?
327 * 検索結果を?"DB.ERR_CODE" キーでリクエストにセ?して?す?
328 * これら?、リクエスト?アトリビュートへセ?して?為、query タグ??
329 * directWriteTable タグの処?降?リクエストスコープ中での取得になります?
330 *
331 * @param val キャ?ュするサブキー
332 */
333 public void setDb( final String val ) {
334 db = nval( getRequestParameter( val ),db );
335 }
336
337 /**
338 * 【TAG】session Attribute の値を取得します?
339 *
340 * @og.tag
341 * session スコープに登録されて?アトリビュートオブジェクト?値?
342 * 取り出します?
343 *
344 * @param val キャ?ュするサブキー
345 */
346 public void setSession( final String val ) {
347 session = nval( getRequestParameter( val ),session );
348 }
349
350 /**
351 * 【TAG】日付関係?値を取得します?
352 *
353 * @og.tag
354 * これは、{@DATE.XXXX AA BB} 引数処?おこな?め?、サポ?トメソ?です?
355 * 引数は?XXXX AA BB" と?状態で受け取ります?(DATE. ははずした形)
356 * "XXXX" は、日付??行うキー??で予?になって?す?
357 * ・YMD???8文字?日付データ(200X年XX?X日)を扱?す?
358 * ・Y2MD??6文字?日付データ(0X年XX?X日)を扱?す?
359 * ・YM?? ?6文字?日付データ(200X年XX?を扱?す?
360 * ・HMS???6文字?時刻??タ(XX時XX?X?を扱?す?
361 * ・YMDHMS ?14文字?日付データ(200X年XX?X日XX時XX?X?を扱?す?
362 * ・EEE???曜日をデフォルトロケールで表示します?
363 *
364 * F付きは、フォーマットされた日付を返します?
365 * ・YMDF??8文字?日付データ(200X年XX?X日)を扱?す?
366 * ・Y2MDF?6文字?日付データ(0X年XX?X日)を扱?す?
367 * ・YMF???6文字?日付データ(200X年XX?を扱?す?
368 * ・HMSF??6文字?時刻??タ(XX時XX?X?を扱?す?
369 * ・YMDHMSF?14文字?日付データ(200X年XX?X日XX時XX?X?を扱?す?
370 *
371 * AA 引数は、基準となる日付を、YYYYMMDD形式で?します?無??場合??
372 * 処?刻を基準にした、同?グ?の同??年月日時??を使用して値を取得します?
373 * ?できる日付?、?、YYYYMMDD形式とし?時?秒? ゼロにリセ?された状態になります?
374 * AA には、数字で始ま?20050701など)実日付と@で始まるパラメータが使用できます?
375 * @ZZ と記述することで、{@ZZ}で?する?合と同様?リクエストパラメータが使用できます?
376 * こ?パラメータの値は、YYYYMMDD形式?数字か、null(また?ゼロストリング)です?nullの
377 * 場合?、なにも指定されて??判断して、??刻を使用します?
378 * 第?引数は?数字か?#064;)以外?場合?、省略されたと判断されます?
379 *
380 * BB 引数は、日付につ?の?算??行います?
381 * 省略すると、なにも加減算??行いません?
382 * ・SD ?当月の??の日付にセ?します?(当月?日)
383 * ・ED ?当月の??日付にセ?します?(当月月末)
384 * ・SM ?本年の??の月にセ?します?(本年?月)
385 * ・EM ?本年の??月にセ?します?(本年?2月)
386 * ・SW ?日付???週初め(月曜日)にセ?します?日付?当日より前に移動します?
387 * ・EW ?日付???週末(日曜日)にセ?します?日付?当日より後ろに移動します?
388 * ・D1 ??DXXX ?日を指定??け?めます?D1なら翌日、D200 な?00日?
389 * ・M1 ??MXXX ?月を指定??け?めます?M1なら翌月、M6 なら半年?
390 *
391 * @param val キャ?ュするサブキー
392 */
393 public void setDate( final String val ) {
394 date = nval( getRequestParameter( val ),date );
395 }
396
397 /**
398 * 【TAG】Unicode??の値?HTML のエスケープ記号(&#xZZZZ;)に変換します?
399 *
400 * @og.tag
401 * HTMLでのエスケープ文字を使用して、Unicodeを文字?化して登録する為の変換を行います?
402 * ここでは、?力文字を、キャラクタ(char)型に?し?(&#xZZZZ;)に変換して?ます?
403 * よって??常に?文?Shift-JISで?Byte,UTF-8で?Byte)が??Byteになります?
404 * こ?変換された文字?を?HTML上でそ?まま取り出すと、?のUnicode?に戻る為?
405 * 通常のShift-JISでは、扱えな??中国語など)でも表示可能になります?
406 *
407 * @param val キャ?ュするサブキー
408 */
409 public void setNvar( final String val ) {
410 nvar = nval( getRequestParameter( val ),nvar );
411 }
412
413 /**
414 * こ?オブジェクト???表現を返します?
415 * 基本???目?使用します?
416 *
417 * @return こ?クラスの??表現
418 */
419 @Override
420 public String toString() {
421 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
422 .println( "VERSION" ,VERSION )
423 .println( "sys" ,sys )
424 .println( "user" ,user )
425 .println( "gui" ,gui )
426 .println( "mem" ,mem )
427 .println( "lbl" ,lbl )
428 // .println( "msg" ,msg )
429 .println( "db" ,db )
430 .println( "session" ,session )
431 .println( "date" ,date )
432 .println( "nvar" ,nvar )
433 .println( "Other..." ,getAttributes().getAttribute() )
434 .fixForm().toString() ;
435 }
436 }