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    }