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                            String errMsg = "<b>" + getTagName() + "タグは、ProcessTag の??(要?に記述してください?/b>";
107                            throw new HybsSystemException( errMsg );
108                    }
109    
110                    process.addParam( key,value );
111    
112                    return(EVAL_PAGE);
113            }
114    
115            /**
116             * タグリブオブジェクトをリリースします?
117             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
118             *
119             */
120            @Override
121            protected void release2() {
122                    super.release2();
123                    key             = null;
124                    value   = null;
125            }
126    
127            /**
128             * 【TAG】リクエスト情報 に登録するキーをセ?します?
129             *
130             * @og.tag リクエスト情報 に登録するキーをセ?します?
131             *
132             * @param       key1 リクエスト情報に登録するキー
133             */
134            public void setKey( final String key1 ) {
135                    key = nval( getRequestParameter( key1 ),key ) ;
136            }
137    
138            /**
139             * 【TAG】リクエスト情報 に登録する値をセ?します?
140             *
141             * @og.tag リクエスト情報 に登録する値をセ?します?
142             *
143             * @param       val     リクエスト情報に登録する値
144             */
145            public void setValue( final String val ) {
146                    value = nval( getRequestParameter( val ),value );
147            }
148    
149            /**
150             * シリアライズ用のカスタ?リアライズ書き込みメソ?
151             *
152             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
153             * @serialData ?のオブジェクト?、シリアライズされません?
154             *
155             * @param       strm    ObjectOutputStreamオブジェク?
156             * @throws IOException  入出力エラーが発生した??
157             */
158            private void writeObject( final ObjectOutputStream strm ) throws IOException {
159                    strm.defaultWriteObject();
160            }
161    
162            /**
163             * シリアライズ用のカスタ?リアライズ読み込みメソ?
164             *
165             * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します?
166             *
167             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
168             * @serialData ?のオブジェクト?、シリアライズされません?
169             *
170             * @param       strm    ObjectInputStreamオブジェク?
171             * @see #release2()
172             * @throws IOException  シリアライズに関する入出力エラーが発生した??
173             * @throws ClassNotFoundException       クラスを見つけることができなかった??
174             */
175            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
176                    strm.defaultReadObject();
177            }
178    
179            /**
180             * こ?オブジェクト???表現を返します?
181             * 基本???目?使用します?
182             *
183             * @return こ?クラスの??表現
184             */
185            @Override
186            public String toString() {
187                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
188                                    .println( "VERSION"                             ,VERSION                        )
189                                    .println( "key"                                 ,key                            )
190                                    .println( "value"                               ,value                          )
191                                    .fixForm().toString() ;
192            }
193    }