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 * ●形式:<og:dbMetaDataQuery action="・・・" ・・・ />
040 * ●body:なし
041 *
042 * ●Tag定義:
043 *   <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 *   />
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 DB検索
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}