    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.fukurou.util.ErrorMessage;
    019import org.opengion.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
    020import org.opengion.fukurou.util.ArraySet;                                              // 6.4.3.4 (2016/03/11)
    021import org.opengion.hayabusa.common.HybsSystem;
    022import org.opengion.hayabusa.common.HybsSystemException;
    023import org.opengion.hayabusa.db.DBTableModel;
    024import org.opengion.hayabusa.db.DBMetaData;
    025
    026import static org.opengion.fukurou.util.StringUtil.nval ;
    027import static org.opengion.fukurou.system.HybsConst.BR;                 // 6.1.0.0 (2014/12/26) refactoring
    028
    029import java.util.Locale ;
    030import java.util.Set;                                                                                   // 6.4.3.4 (2016/03/11)
    031
    032/**
    033 * データベース情報(DBMetaData)より、テーブル、カラム等の情報を取得するタグです。
    034 *
    035 * データベースに関する包括的な情報を提供する、DatabaseMetaData の内容を
    036 * 取得して、DBTableModel にセットするタグです。
    037 *
    038 * @og.formSample
    039 * ●形式：&lt;og:dbMetaDataQuery action="･･･" ･･･ /&gt;
    040 * ●body：なし
    041 *
    042 * ●Tag定義：
    043 *   &lt;og:dbMetaDataQuery
    044 *       command            【TAG】コマンド[NEW/RENEW]をセットします(初期値:NEW)
    045 *       action           ○【TAG】アクション(SCHEMAS,TABLES,COLUMNS,INDEXINFO,PROCEDURES)を指定します(必須)。
    046 *       catalog            【TAG】カタログ名をセットします(初期値:null)
    047 *       schema             【TAG】スキーマ名パターンをセットします(初期値:null)
    048 *       tableName          【TAG】テーブル名パターンをセットします(初期値:null)
    049 *       columnName         【TAG】列名パターンをセットします(初期値:null)
    050 *       procName           【TAG】プロシージャ名パターンをセットします(初期値:null)
    051 *       unique             【TAG】返すインデックスの種類[true:ユニークのみ/false:非ユニーク含む]を指定します(初期値:false)
    052 *       approximate        【TAG】統計情報の精度[true:概数/false:正確]を指定します(初期値:true)
    053 *       scope              【TAG】キャッシュする場合のスコープ[request/page/session/application]を指定します(初期値:session)
    054 *       displayMsg         【TAG】検索結果を画面上に表示するメッセージリソースIDを指定します(初期値:MSG0033[　件検索しました])
    055 *       notfoundMsg        【TAG】検索結果がゼロ件の場合に表示するメッセージリソースIDを指定します(初期値:MSG0077[対象データはありませんでした])
    056 *       tableId            【TAG】(通常は使いません)結果をDBTableModelに書き込んで、sessionに登録するときのキーを指定します
    057 *       dbid               【TAG】(通常は使いません)Queryオブジェクトを作成する時のDB接続IDを指定します
    058 *       mainTrans          【TAG】(通常は使いません)タグで処理される処理がメインとなるトランザクション処理かどうかを指定します(初期値:false)
    059 *       useTimeView        【TAG】処理時間を表示する TimeView を表示するかどうかを指定します
    060 *                                                                              (初期値:VIEW_USE_TIMEBAR[={@og.value SystemData#VIEW_USE_TIMEBAR}])。
    061 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    062 *   /&gt;
    063 *
    064 * ●使用例
    065 *    command属性 は、columnSetタグのcommand属性と同一の場合のみ、処理します。
    066 *    [command属性]
    067 *      NEW       新規
    068 *      RENEW     再検索
    069 *
    070 *    [action属性]
    071 *      SCHEMAS    このデータベースで使用可能なスキーマ名を取得します。
    072 *      TABLES     指定されたカタログで使用可能なテーブルに関する記述を取得します。
    073 *      COLUMNS    指定されたカタログで使用可能なテーブル列の記述を取得します。
    074 *      INDEXINFO  指定されたテーブルのインデックスと統計情報に関する記述を取得します。
    075 *      PROCEDURES 指定されたカタログで使用可能なストアドプロシージャに関する記述を取得します。
    076 *
    077 * @og.group ＤＢ検索
    078 *
    079 * @version  4.0
    080 * @author       Kazuhiko Hasegawa
    081 * @since    JDK5.0,
    082 */
    083public class DBMetaDataQueryTag extends CommonTagSupport {
    084        /** このプログラムのVERSION文字列を設定します。   {@value} */
    085        private static final String VERSION = "6.4.3.4 (2016/03/11)" ;
    086        private static final long serialVersionUID = 643420160311L ;
    087
    088        /** command 引数に渡す事の出来る コマンド  新規 {@value} */
    089        public static final String CMD_NEW       = "NEW" ;
    090        /** command 引数に渡す事の出来る コマンド  再検索 {@value} */
    091        public static final String CMD_RENEW = "RENEW" ;
    092
    093        /** action 引数に渡す事の出来る アクションコマンド  スキーマ名 {@value} */
    094        public static final String ACT_SCHEMAS     = "SCHEMAS" ;
    095        /** action 引数に渡す事の出来る アクションコマンド  テーブル {@value} */
    096        public static final String ACT_TABLES      = "TABLES" ;
    097        /** action 引数に渡す事の出来る アクションコマンド  テーブル列 {@value} */
    098        public static final String ACT_COLUMNS     = "COLUMNS" ;
    099        /** action 引数に渡す事の出来る アクションコマンド  インデックスと統計情報{@value} */
    100        public static final String ACT_INDEXINFO   = "INDEXINFO" ;
    101        /** action 引数に渡す事の出来る アクションコマンド  ストアドプロシージャ{@value} */
    102        public static final String ACT_PROCEDURES  = "PROCEDURES" ;
    103
    104        // 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。
    105        private static final Set<String> COMMAND_SET = new ArraySet<>( CMD_NEW , CMD_RENEW );
    106        private static final Set<String> ACTION_SET = new ArraySet<>( ACT_SCHEMAS , ACT_TABLES , ACT_COLUMNS , ACT_INDEXINFO , ACT_PROCEDURES );
    107
    108        private String  tableId     = HybsSystem.TBL_MDL_KEY;
    109
    110        private String  command         = "NEW";
    111        private String  action          ;                               // taglib で必須属性にします。
    112        private String  displayMsg      = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
    113        private String  notfoundMsg     = "MSG0077";    // 対象データはありませんでした。
    114
    115        // 4.0.0.0 (2007/10/10) dbid の初期値を、"DEFAULT" から null に変更
    116        private String  dbid            ;
    117        private String  catalog         ;
    118        private String  schema          ;
    119        private String  tableName       ;
    120        private String  procName        ;
    121        private String  columnName      ;
    122        private boolean unique          ;                       // true:ユニークのみ / false:非ユニーク含む
    123        private boolean approximate     = true;         // true:概数 / false:正確
    124        private boolean isMainTrans     = true;         // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し
    125
    126        private long    dyStart         ;                               // 実行時間測定用のDIV要素
    127        private boolean useTimeView     = HybsSystem.sysBool( "VIEW_USE_TIMEBAR" );             // 6.3.6.0 (2015/08/16)
    128
    129        /**
    130         * デフォルトコンストラクター
    131         *
    132         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    133         */
    134        public DBMetaDataQueryTag() { super(); }                // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    135
    136        /**
    137         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
    138         *
    139         * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処理は、DBTableModelが新規作成された処理でのみ行う。
    140         * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。
    141         *
    142         * @return      後続処理の指示(SKIP_BODY)
    143         */
    144        @Override
    145        public int doStartTag() {
    146                dyStart = System.currentTimeMillis();
    147                if( ! check( command, COMMAND_SET ) ) { return SKIP_BODY ; }
    148
    149                useMainTrans( isMainTrans );                    // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し
    150                startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
    151
    152                // 3.5.6.5 (2004/08/09) 削除するのは、セッションのオブジェクトでよい。
    153                // 3.6.0.0 (2004/09/24) 削除するのは、scope="session" の場合のみ。
    154                if( "session".equals( getScope() ) ) {
    155                        removeSessionAttribute( tableId );
    156                        removeSessionAttribute( HybsSystem.VIEWFORM_KEY );
    157                }
    158
    159                return SKIP_BODY ;                              // Body を評価しない
    160        }
    161
    162        /**
    163         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
    164         *
    165         * @og.rev 4.0.0.0 (2006/11/14) notfoundMsg 属性を追加。displayMsg は、VIEW_USE_DISPLAY_MSG で制御
    166         * @og.rev 4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel )
    167         * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。
    168         *
    169         * @return      後続処理の指示
    170         */
    171        @Override
    172        public int doEndTag() {
    173                debugPrint();           // 4.0.0 (2005/02/28)
    174
    175                String label  = "";                             // 4.0.0 (2005/11/30) 検索しなかった場合。
    176                if( check( command, COMMAND_SET ) ) {
    177                        final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE );
    178
    179                        final DBTableModel table = actionExec( action );
    180                        final int executeCount = table.getRowCount();   // 検索した数
    181
    182                        // 実行件数の表示 command="NEW" のときのみ、displayMsg を表示させます。
    183                        // 4.0.0 (2005/11/30) 出力順の変更。一番最初に出力します。
    184                        if(  CMD_NEW.equals( command ) ) {
    185                                if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
    186                                        buf.append( executeCount )
    187                                                .append( getResource().getLabel( displayMsg ) )
    188                                                .append( BR );
    189                                }
    190                                else if( executeCount == 0 && notfoundMsg != null && notfoundMsg.length() > 0 ) {
    191                                        buf.append( getResource().getLabel( notfoundMsg ) )
    192                                                .append( BR );
    193                                }
    194                        }
    195
    196                        // 3.3.3.3 (2003/08/06) 検索結果の件数を、"DB.COUNT" キーでリクエストにセットする。
    197                        setRequestAttribute( "DB.COUNT"   , String.valueOf( executeCount ) );
    198                        // 3.3.3.3 (2003/08/06) 検索結果を、"DB.ERR_CODE" キーでリクエストにセットする。
    199                        setRequestAttribute( "DB.ERR_CODE", String.valueOf( ErrorMessage.OK ) );
    200
    201                        // オーバーフロー時のメッセージを表示
    202        //              if( table != null && table.isOverflow() ) {
    203        //                      buf.append( getResource().getMessage( overflowMsg ) );
    204        //                      buf.append( BR );
    205        //              }
    206
    207                        // 実行件数の表示
    208                        // 2.0.0.8 (2002/10/09) command="NEW" のときのみ、displayMsg を表示させます。
    209        //              if( displayMsg != null && displayMsg.length() > 0 && command.equals( CMD_NEW ) ) {
    210        //                      buf.append( executeCount );
    211        //                      buf.append( getResource().getMessage( displayMsg ) );
    212        //                      buf.append( BR );
    213        //              }
    214
    215                        label = buf.toString();
    216
    217                        // 3.6.0.8 (2004/11/19) トランザクションチェックを行います。
    218                        if( ! commitTableObject( tableId, table ) ) {
    219                                jspPrint( "DBMetaDataQueryTag Query処理が割り込まれました。DBTableModel は登録しません。" );
    220                                return SKIP_PAGE;
    221                        }
    222                }
    223                jspPrint( label );
    224
    225                if( useTimeView ) {             // 6.3.6.0 (2015/08/16)
    226                        // 3.5.4.7 (2004/02/06)
    227                        final long dyTime = System.currentTimeMillis()-dyStart;
    228                        jspPrint( "<div id=\"queryTime\" value=\"" + (dyTime) + "\"></div>" );  // 3.5.6.3 (2004/07/12)
    229                }
    230                return EVAL_PAGE;
    231        }
    232
    233        /**
    234         * タグリブオブジェクトをリリースします。
    235         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    236         *
    237         * @og.rev 4.0.0.0 (2007/10/10) dbid の初期値を、"DEFAULT" から null に変更
    238         * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処理は、DBTableModelが新規作成された処理でのみ行う。
    239         */
    240        @Override
    241        protected void release2() {
    242                super.release2();
    243                tableId     = HybsSystem.TBL_MDL_KEY;
    244                dbid            = null;
    245                catalog         = null;
    246                schema          = null;
    247                tableName       = null;
    248                procName        = null;
    249                columnName      = null;
    250                unique          = false;        // true:ユニークのみ / false:非ユニーク含む
    251                approximate     = true;         // true:概数 / false:正確
    252                displayMsg      = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
    253                notfoundMsg     = "MSG0077";    // 対象データはありませんでした。
    254                isMainTrans     = true;                 // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し
    255                useTimeView     = HybsSystem.sysBool( "VIEW_USE_TIMEBAR" );     // 6.3.6.0 (2015/08/16)
    256        }
    257
    258        /**
    259         * 指定のアクションを実行し、結果を、DBTableModel にセットして返します。
    260         * アクションは、(SCHEMAS,TABLES,COLUMNS,INDEXINFO,PROCEDURES)を指定します。
    261         *
    262         *      SCHEMAS    このデータベースで使用可能なスキーマ名を取得します。
    263         *      TABLES     指定されたカタログで使用可能なテーブルに関する記述を取得します。
    264         *      COLUMNS    指定されたカタログで使用可能なテーブル列の記述を取得します。
    265         *      INDEXINFO  指定されたテーブルのインデックスと統計情報に関する記述を取得します。
    266         *      PROCEDURES 指定されたカタログで使用可能なストアドプロシージャに関する記述を取得します。
    267         *
    268         * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定
    269         *
    270         * @param       action  アクション文字列
    271         *
    272         * @return      テーブルモデル
    273         * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.DBMetaDataQueryTag.ACT_COLUMNS">アクション定数</a>
    274         */
    275        private DBTableModel actionExec( final String action ) {
    276                final DBMetaData metaData = new DBMetaData();
    277                metaData.setDbid( dbid );
    278                metaData.setResourceManager( getResource() );
    279                metaData.setApplicationInfo( getApplicationInfo() );    // 3.8.7.0 (2006/12/15)
    280
    281                DBTableModel tbl = null;
    282
    283                if( ACT_SCHEMAS.equals( action ) ) {
    284                        tbl = metaData.getSchemas() ;
    285                }
    286                else if( ACT_TABLES.equals( action ) ) {
    287                        tbl = metaData.getTables( catalog, schema, tableName ) ;
    288                }
    289                else if( ACT_COLUMNS.equals( action ) ) {
    290                        tbl = metaData.getColumns(catalog, schema, tableName, columnName) ;
    291                }
    292                else if( ACT_INDEXINFO.equals( action ) ) {
    293                        tbl = metaData.getIndexInfo(catalog, schema, tableName, unique, approximate) ;
    294                }
    295                else if( ACT_PROCEDURES.equals( action ) ) {
    296                        tbl = metaData.getProcedures(catalog, schema, procName) ;
    297                }
    298
    299                return tbl ;
    300        }
    301
    302        /**
    303         * 【TAG】コマンド[NEW/RENEW]をセットします(初期値:NEW)。
    304         *
    305         * @og.tag
    306         * コマンドは,HTMLから(get/post)指定されますので,CMD_xxx で設定される
    307         * フィールド定数値のいづれかを、指定できます。
    308         *
    309         * @param       cmd コマンド (public static final 宣言されている文字列)
    310         * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.DBMetaDataQueryTag.CMD_NEW">コマンド定数</a>
    311         */
    312        public void setCommand( final String cmd ) {
    313                final String cmd2 = getRequestParameter( cmd );
    314                if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
    315        }
    316
    317        /**
    318         * 【TAG】アクション(SCHEMAS,TABLES,COLUMNS,INDEXINFO,PROCEDURES)を指定します。
    319         *
    320         * @og.tag
    321         * アクションは,HTMLから(get/post)指定されますので,ACT_xxx で設定される
    322         * フィールド定数値のいづれかを、指定できます。
    323         *
    324         *      SCHEMAS    このデータベースで使用可能なスキーマ名を取得します。
    325         *      TABLES     指定されたカタログで使用可能なテーブルに関する記述を取得します。
    326         *      COLUMNS    指定されたカタログで使用可能なテーブル列の記述を取得します。
    327         *      INDEXINFO  指定されたテーブルのインデックスと統計情報に関する記述を取得します。
    328         *      PROCEDURES 指定されたカタログで使用可能なストアドプロシージャに関する記述を取得します。
    329         *
    330         * @og.rev 6.3.4.0 (2015/08/01) Arrays.toString から String.join に置き換え。
    331         * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。
    332         *
    333         * @param       cmd アクション文字列
    334         * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.DBMetaDataQueryTag.ACT_COLUMNS">アクション定数</a>
    335         */
    336        public void setAction( final String cmd ) {
    337                action = getRequestParameter( cmd );
    338
    339                if( ! check( action, ACTION_SET ) ) {
    340                        final String errMsg = "指定のアクションは実行できません。アクションエラー"       + CR
    341                                                                + "action=[" + action + "] "                                                    + CR
    342                                                                + "actionList=[" + String.join( ", " , ACTION_SET ) + "]" ;
    343                        throw new HybsSystemException( errMsg );
    344
    345                }
    346        }
    347
    348        /**
    349         * 【TAG】(通常は使いません)Queryオブジェクトを作成する時のDB接続IDを指定します(初期値:null)。
    350         *
    351         * @og.tag Queryオブジェクトを作成する時のDB接続IDを指定します。
    352         *
    353         * @param       id データベース接続ID
    354         */
    355        public void setDbid( final String id ) {
    356                dbid = nval( getRequestParameter( id ),dbid );
    357        }
    358
    359        /**
    360         * 【TAG】(通常は使いません)Queryオブジェクトを作成する時のカタログを指定します(初期値:null)。
    361         *
    362         * @og.tag データベースに格納されたカタログ名と一致しなければならない。
    363         * "" はカタログなしでカタログ名を検索する。
    364         * null は、カタログ名を検索の限定に使用してはならないことを意味する
    365         *
    366         * @param       catalog カタログ名
    367         */
    368        public void setCatalog( final String catalog ) {
    369                this.catalog = nval( getRequestParameter( catalog ),this.catalog );
    370        }
    371
    372        /**
    373         * 【TAG】スキーマ名パターンをセットします(初期値:null)。
    374         *
    375         * @og.tag データベースに格納されたスキーマ名と一致しなければならない。
    376         * "" はスキーマなしでスキーマ名を検索する。
    377         * null は、スキーマ名を検索の限定に使用してはならないことを意味する
    378         *
    379         * @param       schema スキーマ名パターン
    380         */
    381        public void setSchema( final String schema ) {
    382                this.schema = nval( getRequestParameter( schema ),this.schema );
    383        }
    384
    385        /**
    386         * 【TAG】テーブル名パターンをセットします(初期値:null)。
    387         *
    388         * @og.tag 。データベースに格納されたテーブル名と一致しなければならない
    389         *
    390         * @param       tableName テーブル名パターン
    391         */
    392        public void setTableName( final String tableName ) {
    393                this.tableName = nval( getRequestParameter( tableName ),this.tableName );
    394        }
    395
    396        /**
    397         * 【TAG】プロシージャ名パターンをセットします(初期値:null)。
    398         *
    399         * @og.tag 。データベースに格納されたプロシージャ名と一致しなければならない
    400         *
    401         * @param       procName プロシージャ名パターン
    402         */
    403        public void setProcName( final String procName ) {
    404                this.procName = nval( getRequestParameter( procName ),this.procName );
    405        }
    406
    407        /**
    408         * 【TAG】列名パターンをセットします(初期値:null)。
    409         *
    410         * @og.tag データベースに格納された列名と一致しなければならない
    411         *
    412         * @param       columnName 列名パターン
    413         */
    414        public void setColumnName( final String columnName ) {
    415                this.columnName = nval( getRequestParameter( columnName ),this.columnName );
    416        }
    417
    418        /**
    419         * 【TAG】返すインデックスの種類[true:ユニークのみ/false:非ユニーク含む]を指定します(初期値:false)。
    420         *
    421         * @og.tag  true の場合は、一意の値のインデックスだけを返す。
    422         * false の場合は、一意であるかどうかにかかわらずインデックスを返す
    423         * 初期値は、false:非ユニーク含む です。
    424         *
    425         * @param       uniqFlag 返すインデックスの種類 [true:ユニークのみ/false:非ユニーク含む]
    426         */
    427        public void setUnique( final String uniqFlag ) {
    428                this.unique = nval( getRequestParameter( uniqFlag ),this.unique );
    429        }
    430
    431        /**
    432         * 【TAG】統計情報の精度[true:概数/false:正確]を指定します(初期値:true)。
    433         *
    434         * @og.tag 指定されたテーブルのインデックスと統計情報に関する記述を取得する場合に
    435         * 結果の精度を指定します。
    436         * true の場合は、結果は概数またはデータ値から外れることもある。
    437         * false の場合は、正確であることが要求される
    438         * 初期値は、true:概数 です。
    439         *
    440         * @param       appFlag 統計情報の精度 [true:概数/false:正確]
    441         */
    442        public void setApproximate( final String appFlag ) {
    443                this.approximate = nval( getRequestParameter( appFlag ),this.approximate );
    444        }
    445
    446        /**
    447         * 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します
    448         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
    449         *
    450         * @og.tag
    451         * 検索結果より、DBTableModelオブジェクトを作成します。これを、下流のviewタグ等に
    452         * 渡す場合に、通常は、session を利用します。その場合の登録キーです。
    453         * query タグを同時に実行して、結果を求める場合、同一メモリに配置される為、
    454         * この tableId 属性を利用して、メモリ空間を分けます。
    455         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
    456         *
    457         * @param       id テーブルID (sessionに登録する時のID)
    458         */
    459        public void setTableId( final String id ) {
    460                this.tableId = nval( getRequestParameter( id ),tableId );
    461        }
    462
    463        /**
    464         * 【TAG】検索結果を画面上に表示するメッセージリソースIDを指定します
    465         *              (初期値:VIEW_DISPLAY_MSG[={@og.value SystemData#VIEW_DISPLAY_MSG}])。
    466         *
    467         * @og.tag
    468         * ここでは、検索結果の件数や登録された件数をまず出力し、
    469         * その次に、ここで指定したメッセージをリソースから取得して
    470         * 表示します。
    471         * 件数を表示させる場合は、displayMsg = "MSG0033"[　件検索しました] をセットしてください。
    472         * 表示させたくない場合は, displayMsg = "" をセットしてください。
    473         * (初期値:システム定数のVIEW_DISPLAY_MSG[={@og.value SystemData#VIEW_DISPLAY_MSG}])。
    474         *
    475         * @param       id 処理結果表示メッセージID
    476         */
    477        public void setDisplayMsg( final String id ) {
    478                final String ids = getRequestParameter( id );
    479                if( ids != null ) { displayMsg = ids; }
    480        }
    481
    482        /**
    483         * 【TAG】検索結果がゼロ件の場合に表示するメッセージリソースIDを指定します(初期値:MSG0077[対象データはありませんでした])。
    484         *
    485         * @og.tag
    486         * ここでは、検索結果がゼロ件の場合のみ、特別なメッセージを表示させます。
    487         * 従来は、displayMsg と兼用で、『0　件検索しました』という表示でしたが、
    488         * displayMsg の初期表示は、OFF になりましたので、ゼロ件の場合のみ別に表示させます。
    489         * 表示させたくない場合は, notfoundMsg = "" をセットしてください。
    490         * 初期値は、MSG0077[対象データはありませんでした]です。
    491         *
    492         * @param       id ゼロ件時表示メッセージID
    493         */
    494        public void setNotfoundMsg( final String id ) {
    495                final String ids = getRequestParameter( id );
    496                if( ids != null ) { notfoundMsg = ids; }
    497        }
    498
    499        /**
    500         * 【TAG】処理時間を表示する TimeView を表示するかどうか[true:する/false:しない]を指定します
    501         *              (初期値:VIEW_USE_TIMEBAR[={@og.value SystemData#VIEW_USE_TIMEBAR}])。
    502         *
    503         * @og.tag
    504         * true に設定すると、処理時間を表示するバーイメージが表示されます。
    505         * これは、DB検索、APサーバー処理、画面表示の各処理時間をバーイメージで
    506         * 表示させる機能です。処理時間の目安になります。
    507         * (初期値:VIEW_USE_TIMEBAR[={@og.value SystemData#VIEW_USE_TIMEBAR}])。
    508         *
    509         * @og.rev 6.3.6.0 (2015/08/16) useTimeView の初期値を、VIEW_USE_TIMEBAR にする。
    510         *
    511         * @param       flag    処理時間を表示 [true:する/false:しない]
    512         */
    513        public void setUseTimeView( final String flag ) {
    514                useTimeView = nval( getRequestParameter( flag ),useTimeView );
    515        }
    516
    517        /**
    518         * タグの名称を、返します。
    519         * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。
    520         *
    521         * @og.rev 4.0.0.0 (2005/01/31) 新規追加
    522         *
    523         * @return  タグの名称
    524         * @og.rtnNotNull
    525         */
    526        @Override
    527        protected String getTagName() {
    528                return "dbMetaDataQuery" ;
    529        }
    530
    531        /**
    532         * 【TAG】(通常は使いません)タグで処理される処理がメインとなるトランザクション処理かどうかを指定します(初期値:true)。
    533         *
    534         * @og.tag
    535         * この値は、ファイルダウンロード処理に影響します。この値がtrueに指定された時にcommitされたDBTableModelが
    536         * ファイルダウンロードの対象の表になります。
    537         *
    538         * このパラメーターは、通常、各タグにより実装され、ユーザーが指定する必要はありません。
    539         * 但し、1つのJSP内でDBTableModelが複数生成される場合に、前に処理したDBTableModelについてファイルダウンロードをさせたい
    540         * 場合は、後ろでDBTableModelを生成するタグで、明示的にこの値をfalseに指定することで、ファイルダウンロード処理の対象から
    541         * 除外することができます。
    542         *
    543         * @og.rev 5.1.6.0 (2010/05/01) 新規作成
    544         *
    545         * @param  flag メイントランザクションかどうか [true:メイン/false:その他]
    546         */
    547        public void setMainTrans( final String flag ) {
    548                isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
    549        }
    550
    551        /**
    552         * このオブジェクトの文字列表現を返します。
    553         * 基本的にデバッグ目的に使用します。
    554         *
    555         * @return このクラスの文字列表現
    556         * @og.rtnNotNull
    557         */
    558        @Override
    559        public String toString() {
    560                return ToString.title( this.getClass().getName() )
    561                                .println( "VERSION"             ,VERSION        )
    562                                .println( "tableId"         ,tableId    )
    563                                .println( "command"             ,command        )
    564                                .println( "action"              ,action         )
    565                                .println( "displayMsg"  ,displayMsg     )
    566                                .println( "dbid"                ,dbid           )
    567                                .println( "catalog"             ,catalog        )
    568                                .println( "schema"              ,schema         )
    569                                .println( "tableName"   ,tableName      )
    570                                .println( "procName"    ,procName       )
    571                                .println( "columnName"  ,columnName     )
    572                                .println( "unique"              ,unique         )
    573                                .println( "approximate" ,approximate)
    574                                .println( "Other..."    ,getAttributes().getAttribute() )
    575                                .fixForm().toString() ;
    576        }
    577}