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 static org.opengion.fukurou.util.StringUtil.nval ;
020    
021    import java.io.ObjectOutputStream;
022    import java.io.ObjectInputStream;
023    import java.io.IOException;
024    
025    /**
026     * ProcessTag に対して、引数(パラメータ)を渡す?入れ子?子クラスです?
027     *
028     * @og.formSample
029     * ●形式?lt;og:param key="ZZZ" value="AAA,BBB" />
030     * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま?
031     *
032     * ●Tag定義??
033     *   <og:param
034     *       key              ○?TAG】リクエスト情報 に登録するキーをセ?します?(??)
035     *       value              【TAG】リクエスト情報 に登録する値をセ?しま?
036     *       debug              【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
037     *   >   ... Body ...
038     *   </og:param>
039     *
040     * ●使用?
041     *     ??変数の渡し方
042     *     <og:process ????? >
043     *        <og:param key="AAA" value="111" />
044     *        <og:param key="BBB" value="222" />
045     *        <og:param key="CCC" value="333" />
046     *        <og:param key="DDD" value="444" />
047     *     </og:process >
048     *
049     *     BODY 部に記述した変数の渡し方
050     *     <og:process ????? >
051     *        <og:param key="SQL" >
052     *          SELECT * FROM DUAL
053     *        </og:param>
054     *     </og:process >
055     *
056     * @og.group 画面表示
057     *
058     * @version  4.0
059     * @author       Kazuhiko Hasegawa
060     * @since    JDK5.0,
061     */
062    public class ParamTag extends CommonTagSupport {
063            //* こ?プログラ??VERSION??を設定します?       {@value} */
064            private static final String VERSION = "4.0.0.0 (2006/09/31)" ;
065    
066            private static final long serialVersionUID = 400020060931L ;
067    
068            private String  key             = null;
069            private String  value   = null;
070    
071            /**
072             * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
073             *
074             * @return      後続????( EVAL_BODY_BUFFERED )
075             */
076            @Override
077            public int doStartTag() {
078                    return ( EVAL_BODY_BUFFERED );          // Body を評価する
079            }
080    
081            /**
082             * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします?
083             *
084             * @return      後続????(SKIP_BODY)
085             */
086            @Override
087            public int doAfterBody() {
088                    if( value == null || value.length() <= 0 ) {
089                            value = getBodyString();
090                    }
091    
092                    return ( SKIP_BODY );
093            }
094    
095            /**
096             * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
097             *
098             * @return      後続????
099             */
100            @Override
101            public int doEndTag() {
102                    debugPrint();           // 4.0.0 (2005/02/28)
103                    ProcessTag process = (ProcessTag)findAncestorWithClass( this,ProcessTag.class );
104                    if( process == null ) {
105                            String errMsg = "<b>こ?タグは、ProcessTag の??(要?に記述してください?/b>";
106                            throw new HybsSystemException( errMsg );
107                    }
108    
109                    process.addParam( key,value );
110    
111                    return(EVAL_PAGE);
112            }
113    
114            /**
115             * タグリブオブジェクトをリリースします?
116             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
117             *
118             */
119            @Override
120            protected void release2() {
121                    super.release2();
122                    key             = null;
123                    value   = null;
124            }
125    
126            /**
127             * 【TAG】リクエスト情報 に登録するキーをセ?します?
128             *
129             * @og.tag リクエスト情報 に登録するキーをセ?します?
130             *
131             * @param       key1 リクエスト情報に登録するキー
132             */
133            public void setKey( final String key1 ) {
134                    key = nval( getRequestParameter( key1 ),key ) ;
135            }
136    
137            /**
138             * 【TAG】リクエスト情報 に登録する値をセ?します?
139             *
140             * @og.tag リクエスト情報 に登録する値をセ?します?
141             *
142             * @param       val     リクエスト情報に登録する値
143             */
144            public void setValue( final String val ) {
145                    value = nval( getRequestParameter( val ),value );
146            }
147    
148            /**
149             * シリアライズ用のカスタ?リアライズ書き込みメソ?
150             *
151             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
152             * @serialData
153             *
154             * @param       strm    ObjectOutputStreamオブジェク?
155             */
156            private void writeObject( final ObjectOutputStream strm ) throws IOException {
157                    strm.defaultWriteObject();
158            }
159    
160            /**
161             * シリアライズ用のカスタ?リアライズ読み込みメソ?
162             *
163             * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します?
164             *
165             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
166             * @serialData
167             *
168             * @param       strm    ObjectInputStreamオブジェク?
169             * @see #release2()
170             */
171            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
172                    strm.defaultReadObject();
173            }
174    
175            /**
176             * こ?オブジェクト???表現を返します?
177             * 基本???目?使用します?
178             *
179             * @return こ?クラスの??表現
180             */
181            @Override
182            public String toString() {
183                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
184                                    .println( "VERSION"                             ,VERSION                        )
185                                    .println( "key"                                 ,key                            )
186                                    .println( "value"                               ,value                          )
187                                    .fixForm().toString() ;
188            }
189    }