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.fukurou.util.ErrorMessage;
019    import org.opengion.hayabusa.common.HybsSystem;
020    import org.opengion.hayabusa.common.HybsSystemException;
021    import org.opengion.hayabusa.db.DBTableModel;
022    import org.opengion.hayabusa.db.DBMetaData;
023    
024    import static org.opengion.fukurou.util.StringUtil.nval ;
025    
026    import java.util.Locale ;
027    
028    /**
029     * ãƒ??タベã?スæƒ??(DBMetaData)よりã€ãƒ†ãƒ¼ãƒ–ルã€ã‚«ãƒ©ãƒ?­‰ã?æƒ??ã‚’å–å¾—ã™ã‚‹ã‚¿ã‚°ã§ã™ã?
030     *
031     * ãƒ??タベã?スã«é–¢ã™ã‚‹åŒ?‹¬çš?ªæƒ??ã‚’æä¾›ã™ã‚‹ã?DatabaseMetaData ã®å†?®¹ã‚?
032     * å–å¾—ã—ã¦ã€DBTableModel ã«ã‚»ãƒ?ƒˆã™ã‚‹ã‚¿ã‚°ã§ã™ã?
033     *
034     * @og.formSample
035     * â—å½¢å¼ï¼?lt;og:dbMetaDataQuery action="?¥?¥?¥" ?¥?¥?¥ />
036     * â—body?šãªã?
037     *
038     * â—Tag定義??
039     *   <og:dbMetaDataQuery
040     *       command            ã€TAG】コマンド[NEW/RENEW]ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:NEW)
041     *       action           â—‹ã?TAG】アクション(SCHEMAS,TABLES,COLUMNS,INDEXINFO,PROCEDURES)を指定ã—ã¾ã?å¿??)ã€?
042     *       catalog            ã€TAG】カタログåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)
043     *       schema             ã€TAG】スキーマåパターンをセãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)
044     *       tableName          ã€TAG】テーブルåパターンをセãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)
045     *       columnName         ã€TAG】å?åパターンをセãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)
046     *       procName           ã€TAG】ã?ロシージャåパターンをセãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)
047     *       unique             ã€TAG】返ã™ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã®ç¨®é¡ž[true:ユニã?クã®ã¿/false:éžãƒ¦ãƒ‹ã?クå«ã‚?を指定ã—ã¾ã?åˆæœŸå€¤:false)
048     *       approximate        ã€TAG】統計情報ã®ç²¾åº¦[true:概数/false:正確]を指定ã—ã¾ã?åˆæœŸå€¤:true)
049     *       scope              ã€TAG】キャãƒ?‚·ãƒ¥ã™ã‚‹å ´åˆã?スコープ[request/page/session/applicaton]を指定ã—ã¾ã?åˆæœŸå€¤:session)
050     *       displayMsg         ã€TAGã€‘æ¤œç´¢çµæžœã‚’ç”»é¢ä¸Šã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0033[ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸ])
051     *       notfoundMsg        ã€TAGã€‘æ¤œç´¢çµæžœãŒã‚¼ãƒ­ä»¶ã®å ´åˆã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0077[対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸ])
052     *       tableId            ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)çµæžœã‚’DBTableModelã«æ›¸ã込んã§ã€sessionã«ç™»éŒ²ã™ã‚‹ã¨ãã?キーを指定ã—ã¾ã?
053     *       dbid               ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)Queryオブジェクトを作æ?ã™ã‚‹æ™‚ã?DB接続IDを指定ã—ã¾ã?
054     *       mainTrans          ã€TAGã€?通常使ã?¾ã›ã‚“)ã‚¿ã‚°ã§å‡¦ç?•れる処ç?Œãƒ¡ã‚¤ãƒ³ã¨ãªã‚‹ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å‡¦ç?‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:false)
055     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
056     *   />
057     *
058     * â—使用ä¾?
059     *    command属æ? ã¯ã€columnSetã‚¿ã‚°ã®command属æ?ã¨åŒä¸??å ´åˆã?ã¿ã€å?ç?—ã¾ã™ã?
060     *    [command属æ?]
061     *      NEW       新�
062     *      RENEW     冿¤œç´¢
063     *
064     *    [action属æ?]
065     *      SCHEMAS    ã“ã?ãƒ??タベã?スã§ä½¿ç”¨å¯èƒ½ãªã‚¹ã‚­ãƒ¼ãƒžåã‚’å–å¾—ã—ã¾ã™ã?
066     *      TABLES     æŒ?®šã•れãŸã‚«ã‚¿ãƒ­ã‚°ã§ä½¿ç”¨å¯èƒ½ãªãƒ??ブルã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã—ã¾ã™ã?
067     *      COLUMNS    æŒ?®šã•れãŸã‚«ã‚¿ãƒ­ã‚°ã§ä½¿ç”¨å¯èƒ½ãªãƒ??ブル列ã?記述をå–å¾—ã—ã¾ã™ã?
068     *      INDEXINFO  æŒ?®šã•れãŸãƒ??ブルã®ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã¨çµ±è¨ˆæƒ…å ±ã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã—ã¾ã™ã?
069     *      PROCEDURES æŒ?®šã•れãŸã‚«ã‚¿ãƒ­ã‚°ã§ä½¿ç”¨å¯èƒ½ãªã‚¹ãƒˆã‚¢ãƒ‰ã?ロシージャã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã—ã¾ã™ã?
070     *
071     * @og.group ?¤?¢æ¤œç´¢
072     *
073     * @version  4.0
074     * @author       Kazuhiko Hasegawa
075     * @since    JDK5.0,
076     */
077    public class DBMetaDataQueryTag extends CommonTagSupport {
078            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
079            private static final String VERSION = "5.1.6.0 (2010/05/01)" ;
080    
081            private static final long serialVersionUID = 516020100501L ;
082    
083            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? æ–°è¦?{@value} */
084            public static final String CMD_NEW       = "NEW" ;
085            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? 冿¤œç´¢ {@value} */
086            public static final String CMD_RENEW = "RENEW" ;
087            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ?リスãƒ? */
088            private static final String[] COMMAND_LIST = new String[] { CMD_NEW , CMD_RENEW };
089    
090            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? スキーマå {@value} */
091            public static final String ACT_SCHEMAS     = "SCHEMAS" ;
092            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? ãƒ??ブル {@value} */
093            public static final String ACT_TABLES      = "TABLES" ;
094            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? ãƒ??ブルåˆ?{@value} */
095            public static final String ACT_COLUMNS     = "COLUMNS" ;
096            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? インãƒ?ƒƒã‚¯ã‚¹ã¨çµ±è¨ˆæƒ…å ±{@value} */
097            public static final String ACT_INDEXINFO   = "INDEXINFO" ;
098            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?アクションコマンãƒ? ストアドã?ロシージャ{@value} */
099            public static final String ACT_PROCEDURES  = "PROCEDURES" ;
100    
101            /** action å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ?リスãƒ? */
102            private static final String[] ACTION_LIST = new String[] {
103                    ACT_SCHEMAS , ACT_TABLES , ACT_COLUMNS , ACT_INDEXINFO , ACT_PROCEDURES };
104    
105            private String  tableId     = HybsSystem.TBL_MDL_KEY;
106    
107            private String  command         = "NEW";
108            private String  action          = null;                 // taglib ã§å¿??属æ?ã«ã—ã¾ã™ã?
109            private long    dyStart         = 0;                    // 実行時間測定用ã®DIVè¦ç´?
110    //      private String  displayMsg      = "MSG0033";    // ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸã€?
111            private String  displayMsg      = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
112            private String  notfoundMsg     = "MSG0077";    // 対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸã€?
113    
114            // 4.0.0.0 (2007/10/10) dbid ã®åˆæœŸå€¤ã‚’ã?"DEFAULT" ã‹ã‚‰ null ã«å¤‰æ›´
115    //      private String  dbid            = "DEFAULT";
116            private String  dbid            = null;
117            private String  catalog         = null;
118            private String  schema          = null;
119            private String  tableName       = null;
120            private String  procName        = null;
121            private String  columnName      = null;
122            private boolean unique          = false;        // true:ユニã?クã®ã¿ / false:éžãƒ¦ãƒ‹ã?クå«ã‚?
123            private boolean approximate     = true;         // true:概数 / false:正確
124            private boolean isMainTrans     = true;         // 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??見直ã?
125    
126            /**
127             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
128             *
129             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??ã€DBTableModelãŒæ–°è¦ä½œæ?ã•れãŸå?ç?§ã®ã¿è¡Œã†ã€?
130             *
131             * @return      後続å?ç??æŒ?¤º(SKIP_BODY)
132             */
133            @Override
134            public int doStartTag() {
135                    dyStart = System.currentTimeMillis();
136                    if( ! check( command, COMMAND_LIST ) ) { return(SKIP_BODY); }
137    
138                    useMainTrans( isMainTrans );                    // 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??見直ã?
139                    startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
140    
141                    // 3.5.6.5 (2004/08/09) 削除ã™ã‚‹ã®ã¯ã€ã‚»ãƒ?‚·ãƒ§ãƒ³ã®ã‚ªãƒ–ジェクトã§ã‚ˆã„ã€?
142                    // 3.6.0.0 (2004/09/24) 削除ã™ã‚‹ã®ã¯ã€scope="session" ã®å ´åˆã?ã¿ã€?
143                    if( "session".equals( getScope() ) ) {
144                            removeSessionAttribute( tableId );
145                            removeSessionAttribute( HybsSystem.VIEWFORM_KEY );
146                    }
147    
148                    return(SKIP_BODY);                              // Body を評価ã—ãªã?
149            }
150    
151            /**
152             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
153             *
154             * @og.rev 4.0.0.0 (2006/11/14) notfoundMsg 属æ?を追åŠ??displayMsg ã¯ã€VIEW_USE_DISPLAY_MSG ã§åˆ¶å¾¡
155             * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹çµ±å? getResource().getMessage > getResource().getLabel )
156             *
157             * @return      後続å?ç??æŒ?¤º
158             */
159            @Override
160            public int doEndTag() {
161                    debugPrint();           // 4.0.0 (2005/02/28)
162    
163                    String label  = "";                             // 4.0.0 (2005/11/30) 検索ã—ãªã‹ã£ãŸå?åˆã?
164                    if( check( command, COMMAND_LIST ) ) {
165                            StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
166    
167                            DBTableModel table = actionExec( action );
168                            int executeCount = table.getRowCount(); // 検索ã—ãŸæ•°
169    
170                            // 実行件数ã®è¡¨ç¤º command="NEW" ã®ã¨ãã?ã¿ã€displayMsg を表示ã•ã›ã¾ã™ã?
171                            // 4.0.0 (2005/11/30) 出力é?ã®å¤‰æ›´ã€‚ä¸?•ªæœ??ã«å‡ºåŠ›ã—ã¾ã™ã?
172    //                      boolean useStatusBar = HybsSystem.sysBool( "VIEW_USE_DISPLAY_MSG" );
173                            if(  CMD_NEW.equals( command ) ) {
174    //                              if( useStatusBar && executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
175                                    if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
176                                            buf.append( executeCount );
177    //                                      buf.append( getResource().getMessage( displayMsg ) );
178                                            buf.append( getResource().getLabel( displayMsg ) );
179                                            buf.append( HybsSystem.BR );
180                                    }
181                                    else if( executeCount == 0 && notfoundMsg != null && notfoundMsg.length() > 0 ) {
182    //                                      buf.append( getResource().getMessage( notfoundMsg ) );
183                                            buf.append( getResource().getLabel( notfoundMsg ) );
184                                            buf.append( HybsSystem.BR );
185                                    }
186                            }
187    
188                            // 3.3.3.3 (2003/08/06) æ¤œç´¢çµæžœã®ä»¶æ•°ã‚’ã?"DB.COUNT" キーã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚»ãƒ?ƒˆã™ã‚‹ã€?
189                            setRequestAttribute( "DB.COUNT"   , String.valueOf( executeCount ) );
190                            // 3.3.3.3 (2003/08/06) æ¤œç´¢çµæžœã‚’ã?"DB.ERR_CODE" キーã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚»ãƒ?ƒˆã™ã‚‹ã€?
191                            setRequestAttribute( "DB.ERR_CODE", String.valueOf( ErrorMessage.OK ) );
192    
193                            // オーãƒã?フロー時ã?メãƒ?‚»ãƒ¼ã‚¸ã‚’表示
194            //              if( table != null && table.isOverflow() ) {
195            //                      buf.append( getResource().getMessage( overflowMsg ) );
196            //                      buf.append( HybsSystem.BR );
197            //              }
198    
199                            // 実行件数ã®è¡¨ç¤º
200                            // 2.0.0.8 (2002/10/09) command="NEW" ã®ã¨ãã?ã¿ã€displayMsg を表示ã•ã›ã¾ã™ã?
201            //              if( displayMsg != null && displayMsg.length() > 0 && command.equals( CMD_NEW ) ) {
202            //                      buf.append( executeCount );
203            //                      buf.append( getResource().getMessage( displayMsg ) );
204            //                      buf.append( HybsSystem.BR );
205            //              }
206    
207                            label = buf.toString();
208    
209                            // 3.6.0.8 (2004/11/19) トランザクションãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
210                            if( ! commitTableObject( tableId, table ) ) {
211                                    jspPrint( "DBMetaDataQueryTag Query処ç?Œå‰²ã‚Šè¾¼ã¾ã‚Œã¾ã—ãŸã€?BTableModel ã¯ç™»éŒ²ã—ã¾ã›ã‚“ã€? );
212                                    return (SKIP_PAGE);
213                            }
214                    }
215                    jspPrint( label );
216    
217                    // 3.5.4.7 (2004/02/06)
218                    long dyTime = System.currentTimeMillis()-dyStart;
219                    jspPrint( "<div id=\"queryTime\" value=\"" + (dyTime) + "\"></div>" );      // 3.5.6.3 (2004/07/12)
220                    return(EVAL_PAGE);
221            }
222    
223            /**
224             * タグリブオブジェクトをリリースã—ã¾ã™ã?
225             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
226             *
227             * @og.rev 4.0.0.0 (2007/10/10) dbid ã®åˆæœŸå€¤ã‚’ã?"DEFAULT" ã‹ã‚‰ null ã«å¤‰æ›´
228             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??ã€DBTableModelãŒæ–°è¦ä½œæ?ã•れãŸå?ç?§ã®ã¿è¡Œã†ã€?
229             */
230            @Override
231            protected void release2() {
232                    super.release2();
233                    tableId     = HybsSystem.TBL_MDL_KEY;
234    //              dbid            = "DEFAULT";
235                    dbid            = null;
236                    catalog         = null;
237                    schema          = null;
238                    tableName       = null;
239                    procName        = null;
240                    columnName      = null;
241                    unique          = false;        // true:ユニã?クã®ã¿ / false:éžãƒ¦ãƒ‹ã?クå«ã‚?
242                    approximate     = true;         // true:概数 / false:正確
243                    dyStart         = 0;
244    //              displayMsg      = "MSG0033";    // ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸã€?
245                    displayMsg      = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
246                    notfoundMsg     = "MSG0077";    // 対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸã€?
247                    isMainTrans     = true;                 // 5.1.6.0 (2010/05/01) DBLastSqlã®å‡¦ç??見直ã?
248            }
249    
250            /**
251             * æŒ?®šã?アクションを実行ã—ã€çµæžœã‚’ã?DBTableModel ã«ã‚»ãƒ?ƒˆã—ã¦è¿”ã—ã¾ã™ã?
252             * アクションã¯ã€?SCHEMAS,TABLES,COLUMNS,INDEXINFO,PROCEDURES)を指定ã—ã¾ã™ã?
253             *
254             *      SCHEMAS    ã“ã?ãƒ??タベã?スã§ä½¿ç”¨å¯èƒ½ãªã‚¹ã‚­ãƒ¼ãƒžåã‚’å–å¾—ã—ã¾ã™ã?
255             *      TABLES     æŒ?®šã•れãŸã‚«ã‚¿ãƒ­ã‚°ã§ä½¿ç”¨å¯èƒ½ãªãƒ??ブルã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã—ã¾ã™ã?
256             *      COLUMNS    æŒ?®šã•れãŸã‚«ã‚¿ãƒ­ã‚°ã§ä½¿ç”¨å¯èƒ½ãªãƒ??ブル列ã?記述をå–å¾—ã—ã¾ã™ã?
257             *      INDEXINFO  æŒ?®šã•れãŸãƒ??ブルã®ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã¨çµ±è¨ˆæƒ…å ±ã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã—ã¾ã™ã?
258             *      PROCEDURES æŒ?®šã•れãŸã‚«ã‚¿ãƒ­ã‚°ã§ä½¿ç”¨å¯èƒ½ãªã‚¹ãƒˆã‚¢ãƒ‰ã?ロシージャã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã—ã¾ã™ã?
259             *
260             * @og.rev 3.8.7.0 (2006/12/15) アクセスログå–å¾—ã?為,ApplicationInfoオブジェクトを設å®?
261             *
262             * @param       action  アクションæ–?­—å?
263             *
264             * @return      ãƒ??ブルモãƒ?ƒ«
265             * @see         <a href="{&#064;docRoot}/constant-values.html#org.opengion.hayabusa.taglib.DBMetaDataQueryTag.ACT_COLUMNS">アクション定数</a>
266             */
267            private DBTableModel actionExec( final String action ) {
268                    DBMetaData metaData = new DBMetaData();
269                    metaData.setDbid( dbid );
270                    metaData.setResourceManager( getResource() );
271                    metaData.setApplicationInfo( getApplicationInfo() );    // 3.8.7.0 (2006/12/15)
272    
273                    DBTableModel tbl = null;
274    
275                    if( ACT_SCHEMAS.equals( action ) ) {
276                            tbl = metaData.getSchemas() ;
277                    }
278                    else if( ACT_TABLES.equals( action ) ) {
279                            tbl = metaData.getTables( catalog, schema, tableName ) ;
280                    }
281                    else if( ACT_COLUMNS.equals( action ) ) {
282                            tbl = metaData.getColumns(catalog, schema, tableName, columnName) ;
283                    }
284                    else if( ACT_INDEXINFO.equals( action ) ) {
285                            tbl = metaData.getIndexInfo(catalog, schema, tableName, unique, approximate) ;
286                    }
287                    else if( ACT_PROCEDURES.equals( action ) ) {
288                            tbl = metaData.getProcedures(catalog, schema, procName) ;
289                    }
290    
291                    return tbl ;
292            }
293    
294            /**
295             * ã€TAG】コマンド[NEW/RENEW]ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:NEW)ã€?
296             *
297             * @og.tag
298             * コマンドã?,HTMLã‹ã‚‰(get/post)æŒ?®šã•れã¾ã™ã?ã§,CMD_xxx ã§è¨­å®šã•れる
299             * フィールド定数値ã®ã?¥ã‚Œã‹ã‚’ã?æŒ?®šã§ãã¾ã™ã?
300             *
301             * @param       cmd コマンãƒ?public static final 宣è¨?•れã¦ã?‚‹æ–?­—å?)
302             * @see         <a href="{&#064;docRoot}/constant-values.html#org.opengion.hayabusa.taglib.DBMetaDataQueryTag.CMD_NEW">コマンド定数</a>
303             */
304            public void setCommand( final String cmd ) {
305                    String cmd2 = getRequestParameter( cmd );
306                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
307            }
308    
309            /**
310             * ã€TAG】アクション(SCHEMAS,TABLES,COLUMNS,INDEXINFO,PROCEDURES)を指定ã—ã¾ã™ã?
311             *
312             * @og.tag
313             * アクションã¯,HTMLã‹ã‚‰(get/post)æŒ?®šã•れã¾ã™ã?ã§,ACT_xxx ã§è¨­å®šã•れる
314             * フィールド定数値ã®ã?¥ã‚Œã‹ã‚’ã?æŒ?®šã§ãã¾ã™ã?
315             *
316             *      SCHEMAS    ã“ã?ãƒ??タベã?スã§ä½¿ç”¨å¯èƒ½ãªã‚¹ã‚­ãƒ¼ãƒžåã‚’å–å¾—ã—ã¾ã™ã?
317             *      TABLES     æŒ?®šã•れãŸã‚«ã‚¿ãƒ­ã‚°ã§ä½¿ç”¨å¯èƒ½ãªãƒ??ブルã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã—ã¾ã™ã?
318             *      COLUMNS    æŒ?®šã•れãŸã‚«ã‚¿ãƒ­ã‚°ã§ä½¿ç”¨å¯èƒ½ãªãƒ??ブル列ã?記述をå–å¾—ã—ã¾ã™ã?
319             *      INDEXINFO  æŒ?®šã•れãŸãƒ??ブルã®ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã¨çµ±è¨ˆæƒ…å ±ã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã—ã¾ã™ã?
320             *      PROCEDURES æŒ?®šã•れãŸã‚«ã‚¿ãƒ­ã‚°ã§ä½¿ç”¨å¯èƒ½ãªã‚¹ãƒˆã‚¢ãƒ‰ã?ロシージャã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã—ã¾ã™ã?
321             *
322             * @param       cmd アクションæ–?­—å?
323             * @see         <a href="{&#064;docRoot}/constant-values.html#org.opengion.hayabusa.taglib.DBMetaDataQueryTag.ACT_COLUMNS">アクション定数</a>
324             */
325            public void setAction( final String cmd ) {
326                    action = getRequestParameter( cmd );
327    
328                    if( ! check( action, ACTION_LIST ) ) {
329    
330                            StringBuilder errMsg = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
331                            errMsg.append( "æŒ?®šã?アクションã¯å®Ÿè¡Œã§ãã¾ã›ã‚“。アクションエラー" );
332                            errMsg.append( HybsSystem.CR );
333                            errMsg.append( "action=[" ).append( action ).append( "] " );
334                            errMsg.append( HybsSystem.CR );
335    
336                            for( int i=0; i<ACTION_LIST.length; i++ ) {
337                                    errMsg.append( " | " );
338                                    errMsg.append( ACTION_LIST[i] );
339                            }
340                            errMsg.append( " | " );
341                            throw new HybsSystemException( errMsg.toString() );
342                    }
343            }
344    
345            /**
346             * ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)Queryオブジェクトを作æ?ã™ã‚‹æ™‚ã?DB接続IDを指定ã—ã¾ã™ã?
347             *
348             * @og.tag Queryオブジェクトを作æ?ã™ã‚‹æ™‚ã?DB接続IDを指定ã—ã¾ã™ã?
349             *
350             * @param       id ãƒ??タベã?ス接続ID
351             */
352            public void setDbid( final String id ) {
353                    dbid = nval( getRequestParameter( id ),dbid );
354            }
355    
356            /**
357             * ã€TAG】カタログåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)ã€?
358             *
359             * @og.tag ãƒ??タベã?ã‚¹ã«æ ¼ç´ã•れãŸã‚«ã‚¿ãƒ­ã‚°åã¨ä¸??ã—ãªã‘れã°ãªã‚‰ãªã??
360             * "" ã¯ã‚«ã‚¿ãƒ­ã‚°ãªã—ã§ã‚«ã‚¿ãƒ­ã‚°åを検索ã™ã‚‹ã€?
361             * null ã¯ã€ã‚«ã‚¿ãƒ­ã‚°åを検索ã®é™å®šã«ä½¿ç”¨ã—ã¦ã¯ãªã‚‰ãªã?“ã¨ã‚’æ„味ã™ã‚‹
362             *
363             * @param       catalog カタログå?
364             */
365            public void setCatalog( final String catalog ) {
366                    this.catalog = nval( getRequestParameter( catalog ),this.catalog );
367            }
368    
369            /**
370             * ã€TAG】スキーマåパターンをセãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)ã€?
371             *
372             * @og.tag ãƒ??タベã?ã‚¹ã«æ ¼ç´ã•れãŸã‚¹ã‚­ãƒ¼ãƒžåã¨ä¸??ã—ãªã‘れã°ãªã‚‰ãªã??
373             * "" ã¯ã‚¹ã‚­ãƒ¼ãƒžãªã—ã§ã‚¹ã‚­ãƒ¼ãƒžåを検索ã™ã‚‹ã€?
374             * null ã¯ã€ã‚¹ã‚­ãƒ¼ãƒžåを検索ã®é™å®šã«ä½¿ç”¨ã—ã¦ã¯ãªã‚‰ãªã?“ã¨ã‚’æ„味ã™ã‚‹
375             *
376             * @param       schema スキーマåパターン
377             */
378            public void setSchema( final String schema ) {
379                    this.schema = nval( getRequestParameter( schema ),this.schema );
380            }
381    
382            /**
383             * ã€TAG】テーブルåパターンをセãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)ã€?
384             *
385             * @og.tag 。データベã?ã‚¹ã«æ ¼ç´ã•れãŸãƒ??ブルåã¨ä¸??ã—ãªã‘れã°ãªã‚‰ãªã?
386             *
387             * @param       tableName ãƒ??ブルåパターン
388             */
389            public void setTableName( final String tableName ) {
390                    this.tableName = nval( getRequestParameter( tableName ),this.tableName );
391            }
392    
393            /**
394             * ã€TAG】ã?ロシージャåパターンをセãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)ã€?
395             *
396             * @og.tag 。データベã?ã‚¹ã«æ ¼ç´ã•れãŸãƒ—ロシージャåã¨ä¸??ã—ãªã‘れã°ãªã‚‰ãªã?
397             *
398             * @param       procName プロシージャåパターン
399             */
400            public void setProcName( final String procName ) {
401                    this.procName = nval( getRequestParameter( procName ),this.procName );
402            }
403    
404            /**
405             * ã€TAG】å?åパターンをセãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:null)ã€?
406             *
407             * @og.tag ãƒ??タベã?ã‚¹ã«æ ¼ç´ã•れãŸåˆ—åã¨ä¸??ã—ãªã‘れã°ãªã‚‰ãªã?
408             *
409             * @param       columnName 列åパターン
410             */
411            public void setColumnName( final String columnName ) {
412                    this.columnName = nval( getRequestParameter( columnName ),this.columnName );
413            }
414    
415            /**
416             * ã€TAG】返ã™ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã®ç¨®é¡ž[true:ユニã?クã®ã¿/false:éžãƒ¦ãƒ‹ã?クå«ã‚?を指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
417             *
418             * @og.tag  true ã®å ´åˆã?ã€ä¸?„ã®å€¤ã®ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã?‘ã‚’è¿”ã™ã€?
419             * false ã®å ´åˆã?ã€ä¸?„ã§ã‚ã‚‹ã‹ã©ã?‹ã«ã‹ã‹ã‚らãšã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã‚’è¿”ã™
420             * åˆæœŸå€¤ã¯ã€false:éžãƒ¦ãƒ‹ã?クå«ã‚?ã§ã™ã?
421             *
422             * @param       uniqFlag è¿”ã™ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã®ç¨®é¡?[true:ユニã?クã®ã¿/false:éžãƒ¦ãƒ‹ã?クå«ã‚?
423             */
424            public void setUnique( final String uniqFlag ) {
425                    this.unique = nval( getRequestParameter( uniqFlag ),this.unique );
426            }
427    
428            /**
429             * ã€TAG】統計情報ã®ç²¾åº¦[true:概数/false:正確]を指定ã—ã¾ã?åˆæœŸå€¤:true)ã€?
430             *
431             * @og.tag æŒ?®šã•れãŸãƒ??ブルã®ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã¨çµ±è¨ˆæƒ…å ±ã«é–¢ã™ã‚‹è¨˜è¿°ã‚’å–å¾—ã™ã‚‹å?åˆã«
432             * çµæžœã®ç²¾åº¦ã‚’指定ã—ã¾ã™ã?
433             * true ã®å ´åˆã?ã€çµæžœã¯æ¦‚æ•°ã¾ãŸã?ãƒ??タ値ã‹ã‚‰å¤–れるã“ã¨ã‚‚ã‚ã‚‹ã?
434             * false ã®å ´åˆã?ã€æ­£ç¢ºã§ã‚ã‚‹ã“ã¨ãŒè¦æ±‚ã•れる
435             * åˆæœŸå€¤ã¯ã€true:概数 ã§ã™ã?
436             *
437             * @param       appFlag 統計情報ã®ç²¾åº¦ [true:概数/false:正確]
438             */
439            public void setApproximate( final String appFlag ) {
440                    this.approximate = nval( getRequestParameter( appFlag ),this.approximate );
441            }
442    
443            /**
444             * ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)çµæžœã®DBTableModelã‚’ã?sessionã«ç™»éŒ²ã™ã‚‹ã¨ãã?キーを指定ã—ã¾ã?
445             *              (åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
446             *
447             * @og.tag
448             * æ¤œç´¢çµæžœã‚ˆã‚Šã€DBTableModelオブジェクトを作æ?ã—ã¾ã™ã?ã“れをã?下æµã?viewã‚¿ã‚°ç­‰ã«
449             * 渡ã™å?åˆã«ã€??常ã¯ã€session を利用ã—ã¾ã™ã?ãã?å ´åˆã?登録キーã§ã™ã?
450             * query ã‚¿ã‚°ã‚’åŒæ™‚ã«å®Ÿè¡Œã—ã¦ã€çµæžœã‚’求ã‚ã‚‹å?åˆã?åŒä¸?ƒ¡ãƒ¢ãƒªã«é…ç½®ã•れる為ã€?
451             * ã“ã? tableId 属æ?を利用ã—ã¦ã€ãƒ¡ãƒ¢ãƒªç©ºé–“ã‚’åˆ?‘ã¾ã™ã?
452             *              (åˆæœŸå€¤:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
453             *
454             * @param       id sessionã«ç™»éŒ²ã™ã‚‹æ™‚ã? ID
455             */
456            public void setTableId( final String id ) {
457                    this.tableId = nval( getRequestParameter( id ),tableId );
458            }
459    
460            /**
461             * ã€TAGã€‘æ¤œç´¢çµæžœã‚’ç”»é¢ä¸Šã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0033[ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸ])ã€?
462             *
463             * @og.tag
464             * ã“ã“ã§ã¯ã€æ¤œç´¢çµæžœã®ä»¶æ•°ã‚?™»éŒ²ã•れãŸä»¶æ•°ã‚’ã¾ãšå?力ã—ã€?
465             * ãã?次ã«ã€ã“ã“ã§æŒ?®šã—ãŸãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚’リソースã‹ã‚‰å–å¾—ã—ã¦
466             * 表示ã—ã¾ã™ã?
467             * 表示ã•ã›ãŸããªã??åˆã?, displayMsg = "" ã‚’ã‚»ãƒ?ƒˆã—ã¦ãã ã•ã„ã€?
468             * åˆæœŸå€¤ã¯ã€æ¤œç´¢ä»¶æ•°ã‚’表示ã—ã¾ã™ã?
469             *
470             * @param       id ãƒ?‚£ã‚¹ãƒ—レイã«è¡¨ç¤ºã•ã›ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ ID
471             */
472            public void setDisplayMsg( final String id ) {
473                    String ids = getRequestParameter( id );
474                    if( ids != null ) { displayMsg = ids; }
475            }
476    
477            /**
478             * ã€TAGã€‘æ¤œç´¢çµæžœãŒã‚¼ãƒ­ä»¶ã®å ´åˆã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0077[対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸ])ã€?
479             *
480             * @og.tag
481             * ã“ã“ã§ã¯ã€æ¤œç´¢çµæžœãŒã‚¼ãƒ­ä»¶ã®å ´åˆã?ã¿ã€ç‰¹åˆ¥ãªãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚’表示ã•ã›ã¾ã™ã?
482             * 従æ¥ã¯ã€displayMsg ã¨å…¼ç”¨ã§ã€ã?0ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸã€ã¨ã?†è¡¨ç¤ºã§ã—ãŸãŒã?
483             * displayMsg ã®åˆæœŸè¡¨ç¤ºã¯ã€OFF ã«ãªã‚Šã¾ã—ãŸã®ã§ã€ã‚¼ãƒ­ä»¶ã®å ´åˆã?ã¿åˆ¥ã«è¡¨ç¤ºã•ã›ã¾ã™ã?
484             * 表示ã•ã›ãŸããªã??åˆã?, notfoundMsg = "" ã‚’ã‚»ãƒ?ƒˆã—ã¦ãã ã•ã„ã€?
485             * åˆæœŸå€¤ã¯ã€MSG0077[対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸ]ã§ã™ã?
486             *
487             * @param       id ãƒ?‚£ã‚¹ãƒ—レイã«è¡¨ç¤ºã•ã›ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ ID
488             */
489            public void setNotfoundMsg( final String id ) {
490                    String ids = getRequestParameter( id );
491                    if( ids != null ) { notfoundMsg = ids; }
492            }
493    
494            /**
495             * ã‚¿ã‚°ã®åç§°ã‚’ã?è¿”ã—ã¾ã™ã?
496             * 自åˆ??身ã®ã‚¯ãƒ©ã‚¹åよりã?自動的ã«å–り出ã›ãªã?Ÿã‚ã?ã“ã?メソãƒ?ƒ‰ã‚’オーãƒã?ライドã—ã¾ã™ã?
497             *
498             * @og.rev 4.0.0.0 (2005/01/31) æ–°è¦è¿½åŠ?
499             *
500             * @return  ã‚¿ã‚°ã®åç§°
501             */
502            @Override
503            protected String getTagName() {
504                    return "dbMetaDataQuery" ;
505            }
506    
507            /**
508             * ã€TAGã€?通常使ã?¾ã›ã‚“)ã‚¿ã‚°ã§å‡¦ç?•れる処ç?Œãƒ¡ã‚¤ãƒ³ã¨ãªã‚‹ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å‡¦ç?‹ã©ã?‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
509             *
510             * @og.tag
511             * ã“ã?値ã¯ã€ãƒ•ァイルãƒ?‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰å?ç?«å½±éŸ¿ã—ã¾ã™ã?ã“ã?値ãŒtrueã«æŒ?®šã•ã‚ŒãŸæ™‚ã«commitã•れãŸDBTableModelã?
512             * ファイルãƒ?‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã?対象ã®è¡¨ã«ãªã‚Šã¾ã™ã?
513             *
514             * ã“ã?パラメーターã¯ã€??常ã€å„ã‚¿ã‚°ã«ã‚ˆã‚Šå®Ÿè£?•れã?ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŒ‡å®šã™ã‚‹å¿?¦ã?ã‚りã¾ã›ã‚“ã€?
515             * ä½?—ã€?ã¤ã®JSPå†?§DBTableModelãŒè¤?•°ç”Ÿæ?ã•れるå?åˆã«ã€å‰ã«å‡¦ç?—ãŸDBTableModelã«ã¤ã?¦ãƒ•ァイルãƒ?‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã‚’ã•ã›ãŸã„
516             * å ´åˆã?ã€å¾Œã‚ã§DBTableModelを生æˆã™ã‚‹ã‚¿ã‚°ã§ã€æ?示çš?«ã“ã?値をfalseã«æŒ?®šã™ã‚‹ã“ã¨ã§ã€ãƒ•ァイルãƒ?‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰å?ç??対象ã‹ã‚‰
517             * 除外ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
518             *
519             * @og.rev 5.1.6.0 (2010/05/01) æ–°è¦ä½œæ?
520             *
521             * @param  flag メイントランザクションã‹ã©ã?‹
522             */
523            public void setMainTrans( final String flag ) {
524                    isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
525            }
526    
527            /**
528             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
529             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
530             *
531             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
532             */
533            @Override
534            public String toString() {
535                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
536                                    .println( "VERSION"             ,VERSION        )
537                                    .println( "tableId"         ,tableId    )
538                                    .println( "command"             ,command        )
539                                    .println( "action"              ,action         )
540                                    .println( "dyStart"     ,dyStart        )
541                                    .println( "displayMsg"  ,displayMsg     )
542                                    .println( "dbid"                ,dbid           )
543                                    .println( "catalog"             ,catalog        )
544                                    .println( "schema"              ,schema         )
545                                    .println( "tableName"   ,tableName      )
546                                    .println( "procName"    ,procName       )
547                                    .println( "columnName"  ,columnName     )
548                                    .println( "unique"              ,unique         )
549                                    .println( "approximate" ,approximate)
550                                    .println( "Other..."    ,getAttributes().getAttribute() )
551                                    .fixForm().toString() ;
552            }
553    }