    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 */
    016package org.opengion.hayabusa.taglib;
    017
    018import org.opengion.hayabusa.common.HybsSystemException;
    019import org.opengion.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
    020
    021import static org.opengion.fukurou.util.StringUtil.nval ;
    022
    023/**
    024 * ProcessTag に対して、引数(パラメータ)を渡す、入れ子の子クラスです。
    025 *
    026 * @og.formSample
    027 * ●形式：&lt;og:param key="ZZZ" value="AAA,BBB" /&gt;
    028 * ●body：あり(EVAL_BODY_BUFFERED:BODYを評価し、{&#064;XXXX} を解析します)
    029 *
    030 * ●Tag定義：
    031 *   &lt;og:param
    032 *       key              ○【TAG】リクエスト情報 に登録するキーをセットします(必須)。
    033 *       value              【TAG】リクエスト情報 に登録する値をセットします
    034 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    035 *   &gt;   ... Body ...
    036 *   &lt;/og:param&gt;
    037 *
    038 * ●使用例
    039 *     一般的な変数の渡し方
    040 *     &lt;og:process ･････ &gt;
    041 *        &lt;og:param key="AAA" value="111" /&gt;
    042 *        &lt;og:param key="BBB" value="222" /&gt;
    043 *        &lt;og:param key="CCC" value="333" /&gt;
    044 *        &lt;og:param key="DDD" value="444" /&gt;
    045 *     &lt;/og:process &gt;
    046 *
    047 *     BODY 部に記述した変数の渡し方
    048 *     &lt;og:process ･････ &gt;
    049 *        &lt;og:param key="SQL" &gt;
    050 *          SELECT * FROM DUAL
    051 *        &lt;/og:param&gt;
    052 *     &lt;/og:process &gt;
    053 *
    054 * @og.group 画面表示
    055 *
    056 * @version  4.0
    057 * @author       Kazuhiko Hasegawa
    058 * @since    JDK5.0,
    059 */
    060public class ParamTag extends CommonTagSupport {
    061        /** このプログラムのVERSION文字列を設定します。   {@value} */
    062        private static final String VERSION = "6.4.2.0 (2016/01/29)" ;
    063        private static final long serialVersionUID = 642020160129L ;
    064
    065        private String  key             ;
    066        private String  value   ;
    067
    068        /**
    069         * デフォルトコンストラクター
    070         *
    071         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    072         */
    073        public ParamTag() { super(); }          // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    074
    075        /**
    076         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
    077         *
    078         * @return      後続処理の指示( EVAL_BODY_BUFFERED )
    079         */
    080        @Override
    081        public int doStartTag() {
    082                return EVAL_BODY_BUFFERED ;             // Body を評価する
    083        }
    084
    085        /**
    086         * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
    087         *
    088         * @return      後続処理の指示(SKIP_BODY)
    089         */
    090        @Override
    091        public int doAfterBody() {
    092                if( value == null || value.length() <= 0 ) {
    093                        value = getBodyString();
    094                }
    095
    096                return SKIP_BODY ;
    097        }
    098
    099        /**
    100         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
    101         *
    102         * @return      後続処理の指示
    103         */
    104        @Override
    105        public int doEndTag() {
    106                debugPrint();           // 4.0.0 (2005/02/28)
    107                final ProcessTag process = (ProcessTag)findAncestorWithClass( this,ProcessTag.class );
    108                if( process == null ) {
    109                        final String errMsg = "<b>" + getTagName() + "タグは、ProcessTag の内側(要素)に記述してください。</b>";
    110                        throw new HybsSystemException( errMsg );
    111                }
    112
    113                process.addParam( key,value );
    114
    115                return EVAL_PAGE ;
    116        }
    117
    118        /**
    119         * タグリブオブジェクトをリリースします。
    120         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    121         *
    122         */
    123        @Override
    124        protected void release2() {
    125                super.release2();
    126                key             = null;
    127                value   = null;
    128        }
    129
    130        /**
    131         * 【TAG】リクエスト情報 に登録するキーをセットします。
    132         *
    133         * @og.tag リクエスト情報 に登録するキーをセットします。
    134         *
    135         * @param       key1 リクエスト情報に登録するキー
    136         */
    137        public void setKey( final String key1 ) {
    138                key = nval( getRequestParameter( key1 ),key ) ;
    139        }
    140
    141        /**
    142         * 【TAG】リクエスト情報 に登録する値をセットします。
    143         *
    144         * @og.tag リクエスト情報 に登録する値をセットします。
    145         *
    146         * @param       val     リクエスト情報に登録する値
    147         */
    148        public void setValue( final String val ) {
    149                value = nval( getRequestParameter( val ),value );
    150        }
    151
    152        /**
    153         * このオブジェクトの文字列表現を返します。
    154         * 基本的にデバッグ目的に使用します。
    155         *
    156         * @return このクラスの文字列表現
    157         * @og.rtnNotNull
    158         */
    159        @Override
    160        public String toString() {
    161                return ToString.title( this.getClass().getName() )
    162                                .println( "VERSION"                             ,VERSION                        )
    163                                .println( "key"                                 ,key                            )
    164                                .println( "value"                               ,value                          )
    165                                .fixForm().toString() ;
    166        }
    167}