    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 static org.opengion.fukurou.util.StringUtil.nval;
    019
    020import java.io.IOException;
    021import java.io.ObjectInputStream;
    022import java.io.ObjectOutputStream;
    023
    024import org.opengion.hayabusa.html.ViewAjaxTreeTableParam;
    025
    026/**
    027 * viewタグの viewFormType が HTMLAjaxTreeTable の場合にパラメータを設定します。
    028 *
    029 * ツリービューを表示する、ViewForm_HTMLAjaxTreeTable クラスに対して、各種パラメータを
    030 * 設定します。
    031 * パラメータが設定されていない場合は、ViewAjaxTreeTableParam の初期値が使用されます。
    032 * (パラメータを使用するには、viewタグのuseParam 属性をtrueに設定する必要があります。)
    033 *
    034 * ここで定義された子データを取得するためのJSPは、別に作成する必要があります。
    035 *
    036 * また、levelClmに設定されたカラムは、レベルと展開を表示するための画像イメージが表示されます。
    037 * 展開レベルに応じて階層を視覚的に表示する場合は、levelClmに設定されたカラムのレンデラーを
    038 * 定義して下さい。
    039 * (例:LVLのコードリソースとして、1→- 2→-- 3→--- 等)
    040 *
    041 * 各属性は、{&#064;XXXX} 変数が使用できます。
    042 * これは、ServletRequest から、XXXX をキーに値を取り出し,この変数に割り当てます。
    043 * つまり、このXXXXをキーにリクエストすれば、この変数に値をセットすることができます。
    044 *
    045 * http://localhost/query.jsp?KEY1=VLA1&amp;KEY2=VAL2
    046 *
    047 * のようなリクエストで、{&#064;KEY1} とすれば、 VAL1 がセットされます。
    048 *
    049 * @og.formSample
    050 * ●形式：&lt;og:ajaxTreeParam keys="YYY,XXX,ZZZ" childJsp="getChildTag.jsp" /&gt;
    051 * ●body：なし
    052 *
    053 * ●Tag定義：
    054 *   &lt;og:ajaxTreeParam
    055 *       childSearchKeys    【TAG】子データを取得するためのJSPに渡す引数のカラム名をセットします(初期値:"")
    056 *       childSearchJsp     【TAG】子データを取得するためのJSPをセットします(初期値:"getChildTag.jsp")
    057 *       levelClm           【TAG】階層レベルとして処理(展開を制御するための画像イメージを表示)するカラム名をセットします(初期値:"LVL")
    058 *       imgCollapsed       【TAG】折りたたまれた状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/collapsed.gif")
    059 *       imgExpanded        【TAG】展開された状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/expanded.gif")
    060 *       imgNoSub           【TAG】展開後子データが存在しない状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/nosub.gif")
    061 *       expandAll          【TAG】初期状態で全展開を行うかを指定します(初期値:false=全展開しない)
    062 *       childViewStartNo   【TAG】子データを表示するためのStartNoを指定します(初期値:-1)
    063 *       expCtrlClm         【TAG】初期全展開した際に最下位の要素の状態(展開済 or 下位あり)を制御するためのカラムを指定します(初期値:EXPAND_CONTROL)
    064 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    065 *   /&gt;
    066 *
    067 * ●使用例
    068 *     ViewFormTag の viewFormType が、HTMLAjaxTreeTable の場合に使用します。
    069 *     useParam 属性を設定しておかないと、使用されません。
    070 *     &lt;og:view
    071 *         viewFormType = &quot;HTMLAjaxTreeTable&quot;
    072 *         command      = &quot;{&#064;command}&quot;
    073 *         startNo      = &quot;0&quot;
    074 *         pageSize     = &quot;20&quot;
    075 *         <b>useParam     = &quot;true&quot;</b>
    076 *     &gt;
    077 *         &lt;og:ajaxTreeParam
    078 *             childSearchkeys = "YYY,XXX,ZZZ"
    079 *             childSearchJsp  = "getChildTag.jsp"
    080 *             levelClm        = "LVL"
    081 *             imgCollapsed    = "collapsed.gif"
    082 *             imgExpanded     = "expanded.gif"
    083 *             imgNoSub        = "nosub.gif"
    084 *        /&gt;
    085 *     &lt;/og:view &gt;
    086 *
    087 * @og.group 画面表示
    088 *
    089 * @version  4.0
    090 * @author       Hiroki Nakamura
    091 * @since    JDK5.0,
    092 */
    093public class ViewAjaxTreeParamTag extends ViewParamTag {
    094        //* このプログラムのVERSION文字列を設定します。   {@value} */
    095        private static final String VERSION = "4.3.5.0 (2008/02/01)" ;
    096
    097        private static final long serialVersionUID = 435020080201L ;
    098
    099        /**
    100         * 【TAG】子データを取得するためのJSPに渡す引数のカラム名をセットします(初期値:"")。
    101         *
    102         * @og.tag
    103         * 子データを取得するためのJSPに渡す引数のカラム名をセットします。
    104         * 親データから子データを展開する際に、ここで設定されたキーの値をDBTableModelから
    105         * 取得し、子データ検索用のJSPに渡します。
    106         * 子データ検索用のJSPでは通常のリクエスト変数({&#064;カラム名})として値を取得することが可能です。
    107         *
    108         * @param       keys 引数として渡すカラム名
    109         */
    110        public void setChildSearchKeys( final String keys ) {
    111                putParam( ViewAjaxTreeTableParam.CHILD_SEARCH_KEYS,
    112                                  nval( getRequestParameter( keys ),"" ) );
    113        }
    114
    115        /**
    116         * 【TAG】子データを取得するためのJSPをセットします(初期値:"getChildTag.jsp")。
    117         *
    118         * @og.tag
    119         * 子データを取得するためのJSPをセットします。
    120         * このJSPで子データを取得し、viewタグでHTML出力した結果をパースし、子データとして
    121         * 親データの直下に要素を挿入します。
    122         * 子データ検索用のJSPでは通常のリクエスト変数({&#064;カラム名})として値を取得することが可能です。
    123         *
    124         * @param       jsp JSPファイル名
    125         */
    126        public void setChildSearchJsp( final String jsp ) {
    127                putParam( ViewAjaxTreeTableParam.CHILD_SEARCH_JSP,
    128                                  nval( getRequestParameter( jsp ),"getChildTag.jsp" ) );
    129        }
    130
    131        /**
    132         * 【TAG】階層レベルとして処理(展開を制御するための画像イメージを表示)するカラム名をセットします(初期値:"LVL")。
    133         *
    134         * @og.tag
    135         * 階層レベルとして処理(展開を制御するための画像イメージを表示)するカラム名をセットします。
    136         * 子データを取得した際に、ここで指定されたカラムは、親レベルに対して自動的に+1されます。
    137         *
    138         * @param       clm レベルカラム
    139         */
    140        public void setLevelClm( final String clm ) {
    141                putParam( ViewAjaxTreeTableParam.LVL_CLM_KEY,
    142                                  nval( getRequestParameter( clm ),"LVL" ) );
    143        }
    144
    145        /**
    146         * 【TAG】折りたたまれた状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/collapsed.gif")。
    147         *
    148         * @og.tag
    149         * 折りたたまれた状態を表現するための画像ファイル名をセットします。
    150         * 「折りたたまれた状態」とは、未展開の状態、及び展開後に折りたたんだ状態の両方を指します。
    151         *
    152         * @param       img 画像ファイル名
    153         */
    154        public void setImgCollapsed( final String img ) {
    155                putParam( ViewAjaxTreeTableParam.IMG_COLLAPSED,
    156                                  nval( getRequestParameter( img ),"collapsed.gif" ) );
    157        }
    158
    159        /**
    160         * 【TAG】展開された状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/expanded.gif")。
    161         *
    162         * @og.tag
    163         * 展開された状態を表現するための画像ファイル名をセットします。
    164         *
    165         * @param       img 画像ファイル名
    166         */
    167        public void setImgExpanded( final String img ) {
    168                putParam( ViewAjaxTreeTableParam.IMG_EXPANDED,
    169                                  nval( getRequestParameter( img ),"expanded.gif" ) );
    170        }
    171
    172        /**
    173         * 【TAG】展開後子データが存在しない状態を表現するための画像ファイル名をセットします(初期値:"/jsp/image/nosub.gif")。
    174         *
    175         * @og.tag
    176         * 展開後子データが存在しない状態を表現するための画像ファイル名をセットします。
    177         *
    178         * @param       img 画像ファイル名
    179         */
    180        public void setImgNoSub( final String img ) {
    181                putParam( ViewAjaxTreeTableParam.IMG_NO_SUB,
    182                                  nval( getRequestParameter( img ),"nosub.gif" ) );
    183        }
    184
    185        /**
    186         * 【TAG】初期状態で全展開を行うかを指定します(初期値:false=全展開しない)。
    187         *
    188         * @og.tag
    189         * 初期状態で全展開を行うかを指定します。DBTableModel上のデータが展開済みのデータ
    190         * であると仮定し、全展開を行った状態で表示します。
    191         * ※ この属性をtrueに指定しても子データ取得用のJSPが再帰的に呼び出される訳では
    192         *    ありません。子データの取得は、予めqueryで行っておく必要があります。
    193         *
    194         * @og.rev 4.3.3.0 (2008/10/01) 新規作成
    195         *
    196         * @param       flg 初期状態で全展開を行うか
    197         */
    198        public void setExpandAll( final String flg ) {
    199                putParam( ViewAjaxTreeTableParam.EXPAND_ALL,
    200                                  nval( getRequestParameter( flg ),"false" ) );
    201        }
    202
    203        /**
    204         * 【TAG】子データを表示するためのStartNoを指定します(初期値:-1)。
    205         *
    206         * @og.tag
    207         * 子データを取得するためのJSP内で使用します。
    208         * 子データを取得し、元のDBTableModelにマージした後、子データのみを表示するため、
    209         * ここでstartNoを指定して差分データを表示します。
    210         *
    211         * @og.rev 4.3.3.0 (2008/10/01) 新規作成
    212         *
    213         * @param       no 子データを表示するためのStartNo
    214         */
    215        public void setChildViewStartNo( final String no ) {
    216                putParam( ViewAjaxTreeTableParam.CHILD_VIEW_START_NO,
    217                                  nval( getRequestParameter( no ),"-1" ) );
    218        }
    219
    220        /**
    221         * 【TAG】初期全展開した際に最下位の要素の状態(展開済 or 下位あり)を制御するためのカラムを指定します(初期値:EXPAND_CONTROL)。
    222         *
    223         * @og.tag
    224         * 初期全展開した際に最下位の要素の状態(展開済 or 下位あり)を制御するためのカラムを指定します。
    225         * ここで指定されたカラムの値により、全展開された結果の最下位の要素の状態指定することができます。
    226         * この機能を利用することで、第3レベルまで存在するデータの内、第2レベルまでを展開しておく、
    227         * ということを実現することができます。
    228         * ここで指定したカラムが持つ値の意味は以下の通りです。
    229         *  '0' or 'false' 展開済 (初期値)
    230         *  '1' or 'true'  未展開 ※展開ボタンを押すことで更に下位展開が可能
    231         *
    232         * なお、この機能は、全展開時(expandAll="true")のみ有効であり、通常の第1レベル展開の場合は、
    233         * このカラムは無視されます。
    234         *
    235         * @og.rev 4.3.5.0 (2008/02/01) 新規作成
    236         *
    237         * @param       key 全展開時に最下位の要素の状態を制御するためのカラム
    238         */
    239        public void setExpCtrlClm( final String key ) {
    240                putParam( ViewAjaxTreeTableParam.EXPAND_CONTROL_CLM_KEY,
    241                                  nval( getRequestParameter( key ),"EXPAND_CONTROL" ) );
    242        }
    243
    244        /**
    245         * タグの名称を、返します。
    246         * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。
    247         *
    248         * @og.rev 4.3.1.0 (2008/09/03) 新規追加
    249         *
    250         * @return  タグの名称
    251         */
    252        @Override
    253        protected String getTagName() {
    254                return "ajaxTreeParam" ;
    255        }
    256
    257        /**
    258         * シリアライズ用のカスタムシリアライズ書き込みメソッド
    259         *
    260         * @og.rev 4.3.1.0 (2008/09/03) 新規追加
    261         * @serialData 一部のオブジェクトは、シリアライズされません。
    262         *
    263         * @param       strm    ObjectOutputStreamオブジェクト
    264         * @throws IOException  入出力エラーが発生した場合
    265         */
    266        private void writeObject( final ObjectOutputStream strm ) throws IOException {
    267                strm.defaultWriteObject();
    268        }
    269
    270        /**
    271         * シリアライズ用のカスタムシリアライズ読み込みメソッド
    272         *
    273         * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。
    274         *
    275         * @og.rev 4.3.1.0 (2008/09/03) 新規追加
    276         * @serialData 一部のオブジェクトは、シリアライズされません。
    277         *
    278         * @param       strm    ObjectInputStreamオブジェクト
    279         * @see #release2()
    280         * @throws IOException  シリアライズに関する入出力エラーが発生した場合
    281         * @throws ClassNotFoundException       クラスを見つけることができなかった場合
    282         */
    283        private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
    284                strm.defaultReadObject();
    285        }
    286}