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 static org.opengion.fukurou.util.StringUtil.nval ;
019    
020    /**
021     * æŒ?®šされた value 値の{@XXXX} 変数が設定された場合ã?み表示するタグですã?
022     *
023     * value 値に、{@XXXX} 変数を使用して、リクエストå?が設定された場合ã?み
024     * そã?値を表示しますã?これは、{@XXXX} 変数と固定å?をçµ?�¿合わせた場合でã‚?
025     * 同様に、å?が設定されてã�?�ªã�??合ã?、使用されませんã€?
026     * defaultVal が設定されており、リクエストå?が設定されてã�?�ªã�??合ã?defaultVal 値ã�?
027     * 使用されますã?
028     * こã?タグが使用されるケースの代表は、SQLでの order by 句ですã?ä¸?ˆ¬のリクエスト時にはã€?
029     * order by 句をリクエストで設定して、ユーザーが検索する時に、å?り替えができるように
030     * しますã?別画面から、リンク等で画面を呼び出すå?合ã?ã€??常 order by 句の条件までã€?
031     * æŒ?®šしません。そのような場合に備えて、og:appear タグでdefaultVal 値を設定しておきã€?
032     * 未æŒ?®š時の検索é ?‚’予めæŒ?®šしておきますã?
033     *
034     * @og.formSample
035     * ●形式ï¼?lt;og:appear startKey="[order by|…]" value="…" defaultVal="[…]" />
036     * ●body?šなã�?
037     *
038     * ●Tag定義
039     *   <og:appear
040     *       startKey           【TAG】開始文字å?を設定しまã�?初期値:"")
041     *       value            ○ã?TAG】å?をセãƒ?ƒˆしまã�?æŒ?®šされた値ã�?設定されてã�?‚‹場合ã?み使用されまã�?(å¿??)
042     *       defaultVal         【TAG】å?期å?を設定しまã�?value値がNULLの場合に、この初期値が表示)
043     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
044     *   />
045     *
046     * ●使用ä¾?
047     * <!-- DB検索 SQLæ–?¨˜述 debug="true" でSQLæ–?‚’確認できますã?-->
048     * <og:query command="{@command}" debug="{@debug}" maxRowCount="{@maxRowCount}">
049     *         select CLM,NAME_JA,LABEL_NAME,URL,KBSAKU,
050     *                 SYSTEM_ID,LANG,FGJ,(CASE WHEN URL IS NULL THEN 0 ELSE 1 END) AS ONMARK
051     *         from GF41
052     *     <!-- 検索条件でWhereTagを使用すれば{@xxxx}がNULLの場合ã?そã?条件は無視されますã? -->
053     *     <og:where>
054     *         <og:and value = "FGJ        in  ('0','1')"      />
055     *         <og:and value = "SYSTEM_ID  =  '{@SYSTEM_ID}'"     />
056     *         <og:and value = "LANG       =  '{@LANG}'"          />
057     *         <og:and value = "CLM        like '{@CLM}%'"        />
058     *         <og:and value = "NAME_JA    like '{@NAME_JA}%'"    />
059     *         <og:and value = "LABEL_NAME like '{@LABEL_NAME}%'" />
060     *         <og:and value = "KBSAKU     =    '{@KBSAKU}'"      />
061     *     </og:where>
062     *     <!-- ORDER BY句でAppearTagを使用すれば{@ORDER_BY}がNULLの場合ã?ORDER BY句は無視されますã? -->
063     *     <!-- またã?{@ORDER_BY}がNULLの場合に、defaultVal属æ?を指定すれã?、その値でORDER BY表示されますã? -->
064     *     <og:appear startKey = "order by" value = "{@ORDER_BY}"
065     *                 defaultVal = "SYSTEM_ID,CLM,LANG" />
066     * </og:query>
067     *
068     * @og.group 画面部å“?
069     *
070     * @version  4.0
071     * @author      Kazuhiko Hasegawa
072     * @since    JDK5.0,
073     */
074    public class AppearTag extends CommonTagSupport {
075            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
076            private static final String VERSION = "4.0.0.0 (2005/08/31)" ;
077    
078            private static final long serialVersionUID = 400020050831L ;
079    
080            private String   startKey    = "";
081            private String   value       = null;
082            private String   defaultVal  = null;
083    
084            /**
085             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
086             *
087             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
088             *
089             * @return      後続å?ç�??æŒ?¤º(EVAL_PAGE)
090             */
091            @Override
092            public int doEndTag() {
093                    debugPrint();           // 4.0.0 (2005/02/28)
094                    String output = getRequestParameter( value );
095                    if( isNull() ) {
096                            output = defaultVal;
097                    }
098    
099                    if( output != null ) {
100                            jspPrint( startKey + " " + output );
101                    }
102    
103                    return(EVAL_PAGE);
104            }
105    
106            /**
107             * タグリブオブジェクトをリリースしますã?
108             *
109             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
110             *
111             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
112             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
113             *
114             */
115            @Override
116            protected void release2() {
117                    super.release2();
118                    startKey    = "";
119                    value       = null;
120                    defaultVal  = null;
121            }
122    
123            /**
124             * 【TAG】開始文字å?を設定しまã�?初期値:"")ã€?
125             *
126             * @og.tag
127             * こã?キーは、バリューと接続される場合に空白æ–?­—をä¸?�¤挿入しますã?
128             *
129             * @param       val 開始文字å?(例:startKey="order by")
130             */
131            public void setStartKey( final String val ) {
132                    startKey = nval( getRequestParameter( val ),startKey );
133            }
134    
135            /**
136             * 【TAG】å?をセãƒ?ƒˆしまã�?æŒ?®šされた値ã�?設定されてã�?‚‹場合ã?み使用されまã�?ã€?
137             *
138             * @og.tag
139             * æŒ?®šされた値ã�?設定されてã�?‚‹場合ã?みã€?–‹始文字å?(startKey)とçµ?�¿合わせれて、使用されますã?
140             * これは、ä¸?ˆ¬にvalue値が変動する場合に、defaultVal 等に重è¤?�™るå?ã‚?
141             * 設定したくなã�??合に使用しますã?{@XXXX}æ–?­—が使用できますã?
142             *
143             * @param       val 値
144             */
145            public void setValue( final String val ) {
146                    value = val;
147            }
148    
149            /**
150             * 【TAG】å?期å?を設定しまã�?value値がNULLの場合に、この初期値が表示)ã€?
151             *
152             * @og.tag
153             * value値がNULL(æŒ?®šされなã�?の場合に、この初期値がå?として使用されますã?
154             *
155             * @param       val 初期値
156             */
157            public void setDefaultVal( final String val ) {
158                    defaultVal = nval( getRequestParameter( val ),defaultVal );
159            }
160    
161            /**
162             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
163             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
164             *
165             * @return こã?クラスのæ–?­—å?表現
166             */
167            @Override
168            public String toString() {
169                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
170                                    .println( "VERSION"             ,VERSION        )
171                                    .println( "startKey"    ,startKey       )
172                                    .println( "value"               ,value          )
173                                    .println( "defaultVal"  ,defaultVal     )
174                                    .println( "Other..."    ,getAttributes().getAttribute() )
175                                    .fixForm().toString() ;
176            }
177    }