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 static org.opengion.fukurou.util.StringUtil.nval;
019    
020    import java.io.IOException;
021    import java.io.ObjectInputStream;
022    import java.io.ObjectOutputStream;
023    import java.util.Locale;
024    
025    import org.opengion.fukurou.db.DBUtil;
026    import org.opengion.fukurou.db.Transaction;
027    import org.opengion.fukurou.db.TransactionReal;
028    import org.opengion.fukurou.util.ErrorMessage;
029    import org.opengion.fukurou.util.StringUtil;
030    import org.opengion.hayabusa.common.HybsSystem;
031    import org.opengion.hayabusa.common.HybsSystemException;
032    import org.opengion.hayabusa.db.DBColumn;
033    import org.opengion.hayabusa.db.DBEditConfig;
034    import org.opengion.hayabusa.db.DBTableModel;
035    import org.opengion.hayabusa.db.Query;
036    import org.opengion.hayabusa.db.QueryFactory;
037    import org.opengion.hayabusa.resource.GUIInfo;
038    
039    /**
040     * ãƒ??タベã?スの検索を行うタグですã?
041     *
042     * こã?タグのå†?®¹に、SQLæ–?‚’記述しますã? whereタグã€?andタグ を使ã�?�¨引数に応じて
043     * 実行されるSQLæ–?�Œ異なりまã�?使用例参照)ã€?
044     * またã?PL/SQLのSPで検索を行うときもこã?タグを使ã�?�¾すã?
045     * SystemData の USE_SQL_INJECTION_CHECK ã�?true かã?quotCheck 属æ?ã�?true の場合ã?ã€?
046     * ?³?±?¬インジェクション対策用のクォーãƒ?‚£ションチェãƒ?‚¯を行いますã?リクエスト引数に
047     * クォーãƒ?‚£ション(')が含まれると、エラーになりますã?
048     * 同様にUSE_XSS_CHECKがtrueかã?xssCheck属æ?がtrueの場合ã?ã€?
049     * クロスサイトススクリプティング(XSS)対策ã?ためless/greater than signのチェãƒ?‚¯を行いますã?
050     *
051     * ※ こã?タグは、Transaction タグの対象ですã?
052     *
053     * @og.formSample
054     * ●形式ï¼?
055     *       ・<og:query command="NEW" >
056     *              SELECTæ–?
057     *         </og:query>
058     *       ・<og:query command="NEW" names="?¥?¥?¥" queryType="JDBCErrMsg" >
059     *              { call PL/SQL(?,?,?,? ) } 
060     *         </og:query>
061     * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
062     *
063     * ●Tag定義??
064     *   <og:query
065     *       queryType          【TAG】Query を発行する為のクラスID(JDBC,JDBCCallable,JDBCErrMsg,JDBCUpdate)を指定します{@og.doc03Link queryType 初期値:JDBC})
066     *       command            【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?PlsqlUpdateTag,UpdateTag の場合ã?、ENTRY)
067     *       scope              【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
068     *       maxRowCount        【TAGã€?通常は使ã�?�¾せん)ãƒ??タのæœ?¤§読み込み件数を指定しまã�?(初期値:DB_MAX_ROW_COUNT[=1000])(0:[無制限])
069     *       skipRowCount       【TAGã€?通常は使ã�?�¾せん)ãƒ??タの読み始めの初期値を指定しまã�?
070     *       displayMsg         【TAG】検索結果を画面上に表示するメãƒ?‚»ージリソースIDを指定しまã�?(初期値:VIEW_DISPLAY_MSG[=])
071     *       overflowMsg        【TAG】検索ãƒ??タが最大検索数をオーバã?した場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?(初期値:MSG0007[検索結果がã?制限行数をè¶?�ˆましたので、残りはカãƒ?ƒˆされました])
072     *       notfoundMsg        【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])
073     *       names              【TAG】PL/SQLを利用する場合ã?引数にセãƒ?ƒˆすべã�?ãƒ??タの名称をCSV形式でè¤?•°æŒ?®šしまã�?
074     *       stopZero           【TAG】検索結果が0件のときå?ç�?‚’続行するかどã�?�‹[true/false]を指定しまã�?初期値:false[続行する])
075     *       tableId            【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
076     *       dbid               【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しまã�?
077     *       trace              【TAG】引数の SQL æ–?‚’ EXPLAIN PLAN を[true:行う/それ以å¤?行わない]を指定しまã�?初期値:false)
078     *       checkNames         【TAG】リクエスト変数の正規化を行うカラãƒ?‚’CSV形式でè¤?•°æŒ?®šしまã�?
079     *       modifyType         【TAG】DB検索時ã? モãƒ?‚£ファイタイプをæŒ?®šします[A:追åŠ?C:更新/D:削除]
080     *       quotCheck          【TAG】リクエスト情報の クォーãƒ?‚£ション(') 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?初期値:USE_SQL_INJECTION_CHECK)
081     *       stopError          【TAG】PLSQL/SQL処ç�?‚¨ラーの時に処ç�?‚’中止するかどã�?�‹[true/false]を設定しまã�?初期値:true)
082     *       xssCheck           【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å­?><) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?(初期値:USE_XSS_CHECK[=true])
083     *       mainTrans          【TAGã€?通常使ã�?�¾せん)タグで処ç�?�•れる処ç�?�Œメインとなるトランザクション処ç�?�‹どã�?�‹を指定しまã�?初期値:true)
084     *       caseKey            【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
085     *       caseVal            【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
086     *       caseNN             【TAG】指定ã?値がã?null/ゼロæ–?­—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
087     *       caseNull           【TAG】指定ã?値がã?null/ゼロæ–?­—å? の場合ã?、このタグは使用されまã�?初期値:true)
088     *       useBeforeHtmlTag   【TAGã€?処ç�?™‚é–?queryTime)などのæƒ??出力[true:有効/false:無効]を指定しまã�?初期値:true)
089     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
090     *   >   ... Body ...
091     *   </og:query>
092     *
093     * ●使用ä¾?
094     *     <og:query command="NEW">
095     *             select PN,YOBI,NMEN,HINM from XX01 where PN = '{@PN}' order by PN
096     *     </og:query>
097     *
098     *          ・検索条件がå?力されたæ™?{@PN}がNOT NULLのとã�?
099     *            作æ?されるSQLæ–?�çselect PN,YOBI,NMEN,HINM from XX01 where PN = 'AAA' order by PN
100     *          ・検索条件がå?力されなかった時({@PN}がNULLのとã�?
101     *            作æ?されるSQLæ–?�çselect PN,YOBI,NMEN,HINM from XX01 where PN = '' order by PN
102     *
103     *     <og:query command="NEW">
104     *             select PN,YOBI,NMEN,HINM from XX01
105     *         <og:where>
106     *             <og:and value="PN = '{@PN}%'" />
107     *             <og:and value="YOBI like '{@YOBI}%'" />
108     *         </og:where>
109     *             order by PN
110     *     </og:query>
111     *
112     *          ・検索条件がå?力されたæ™?{@PN}がNOT NULLのとã�?
113     *            作æ?されるSQLæ–?�çselect PN,YOBI,NMEN,HINM from XX01 PN = 'AAA%' and YOBI like 'BBB%' order by PN
114     *          ・検索条件がå?力されなかった時({@PN}がNULLのとã�? WHERE句がなくなるã?
115     *            作æ?されるSQLæ–?�çselect PN,YOBI,NMEN,HINM from XX01 order by PN
116     *
117     *        注æ„?WhereTagを使ったå?合ã?下ã?ようにはなりませんã€?
118     *            select PN,YOBI,NMEN,HINM from XX01 PN = '' and YOBI like '%' order by PN
119     *
120     *     <og:query command="NEW">
121     *             select PN,YOBI,NMEN,HINM from XX01 where PN="11111"
122     *         <og:where startKey="and">
123     *             <og:and value="YOBI like '{@PN}%'" />
124     *         </og:where>
125     *             order by PN
126     *     </og:query>
127     *
128     *          ・検索条件がå?力されたæ™?{@YOBI}がNOT NULLのとã�?
129     *            作æ?されるSQLæ–?�çselect PN,YOBI,NMEN,HINM from XX01 PN = '11111' and YOBI like 'BBB%' order by PN
130     *          ・検索条件がå?力されなかった時({@YOBI}がNULLのとã�? WHERE句がなくなるã?
131     *            作æ?されるSQLæ–?�çselect PN,YOBI,NMEN,HINM from XX01 PN = '11111' order by PN
132     *
133     *     <og:query
134     *          command    = "NEW"
135     *          names      = "SYSTEM_ID,LANG,CLM,NAME_JA,LABEL_NAME,KBSAKU,USER.ID"
136     *          checkNames = "CLM,NAME_JA"
137     *          queryType  = "JDBCErrMsg"
138     *          displayMsg = "">
139     *              {call TYPE3B01.TYPE3B01(?,?,?,?)}
140     *     </og:query>
141     *
142     *          ・queryType に JDBCErrMsg を指定して、PL/SQL をコールできますã?
143     *            引数は、names 属æ?をキーにリクエスト変数から読み込みますã?
144     *          ・checkNames にカラãƒ?��を指定すると、columns.valueSet による
145     *            リクエスト変数の正規化を行いますã?
146     *
147     * @og.group ?¤?¢検索
148     * @og.group ?¤?¢登録
149     *
150     * @version  4.0
151     * @author       Kazuhiko Hasegawa
152     * @since    JDK5.0,
153     */
154    public class QueryTag extends CommonTagSupport {
155            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
156            private static final String VERSION = "5.6.5.3 (2013/06/28)" ;
157    
158            private static final long serialVersionUID = 565320130628L ;
159    
160            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 新è¦?{@value} */
161            public static final String CMD_NEW       = "NEW" ;
162            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 再検索 {@value} */
163            public static final String CMD_RENEW = "RENEW" ;
164            /** command 引数に渡す事ã?出来ã‚?コマンãƒ?リスãƒ? */
165            private static final String[] COMMAND_LIST = new String[] { CMD_NEW , CMD_RENEW };
166    
167            /** エラーメãƒ?‚»ージID {@value} */
168            protected static final String errMsgId   = HybsSystem.ERR_MSG_KEY;
169    
170            private   String        queryType       = null;
171            // 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
172    //      private   String        dbid            = "DEFAULT";
173            private   String        dbid            = null ;
174            protected transient DBTableModel        table           = null;
175            protected transient ErrorMessage        errMessage      = null;
176            protected String        tableId         = HybsSystem.TBL_MDL_KEY;
177            protected String        command         = CMD_NEW;
178            protected int           skipRowCount = 0;
179            protected int           maxRowCount     = -1;
180            protected String        sql                     = null;
181            protected int           executeCount = -1;                      // 検索/実行件数
182            protected String        names           = null;
183            protected boolean       outMessage      = true;
184            protected int           errCode         = ErrorMessage.OK;
185            protected boolean       quotCheck       = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" );      // 4.0.0 (2005/08/31)
186            private   boolean       trace           = false;                // 4.0.0 (2005/01/31) å»?­¢
187            private   boolean       stopZero        = false;
188            private   String        modifyType      = null;                 // 3.8.5.1 (2006/05/08) modifyType 属æ?を追åŠ?�—ますã?
189    //      private   String        displayMsg      = "MSG0033";    // ã€?»¶検索しましたã€?
190            protected String        displayMsg      = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
191            private   String        overflowMsg     = "MSG0007";    // 検索結果がã?制限行数をè¶?�ˆましたので、残りはカãƒ?ƒˆされましたã€?
192            private   String        notfoundMsg     = "MSG0077";    // 対象ãƒ??タはありませんでしたã€?
193            private   boolean       isMainTrans     = true;                 // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
194    
195            // 3.5.4.7 (2004/02/06) 実行時間測定用のDIV要ç´?‚’出力しますã?
196            protected long dyStart = 0;
197            // 4.3.3.0 (2008/09/22) PLSQL/SQL実行エラーの際に、å?ç�?‚’中止するかどã�?�‹ã€?
198            protected boolean stopError             = true;
199    
200            private StringBuilder debugMsg = null;          // 3.5.6.0 (2004/06/18)
201    
202            // 3.8.0.5 (2005/08/20) リクエスト変数の正規化を行いますã?
203            private String                  checkNames      = null;
204    
205            // 3.8.5.3 (2006/08/07) トレース時ã?メãƒ?‚»ージæ–?­—å?を保存しておきますã?
206            private String                  traceMsg        = null;
207    
208            protected boolean       xssCheck        = HybsSystem.sysBool( "USE_XSS_CHECK" );        // 5.0.0.2 (2009/09/15)
209    
210            // 5.3.5.0 (2011/05/01) 処ç�?™‚é–?queryTime)などのæƒ??出力ã?有効/無効を指定しますã?
211            private boolean         useBeforeHtmlTag        = true ;
212    
213            /**
214             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
215             *
216             * @og.rev 3.5.4.7 (2004/02/06) 実行時間測定用にã€?–‹始時刻を取得しますã?
217             * @og.rev 3.5.6.5 (2004/08/09) 暫定的に、DBTableModelをå?行削除しますã?
218             * @og.rev 3.6.0.0 (2004/09/24) DBTableModel の先行削除は、scope="session" の場合ã?みã€?
219             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??、DBTableModelが新規作æ?されたå?ç�?�§のみ行うã€?
220             * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
221             *
222             * @return      後続å?ç�??æŒ?¤º
223             */
224            @Override
225            public int doStartTag() {
226                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
227                    if( useTag() ) {
228                            dyStart = System.currentTimeMillis();
229                            if( ! check( command, COMMAND_LIST ) ) { return(SKIP_BODY); }
230    
231                            useMainTrans( isMainTrans );                    // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
232                            startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
233    
234                            // 3.5.6.5 (2004/08/09) 削除するのは、セãƒ?‚·ョンのオブジェクトでよいã€?
235                            // 3.6.0.0 (2004/09/24) 削除するのは、scope="session" の場合ã?みã€?
236                            if( "session".equals( getScope() ) ) {
237                                    removeSessionAttribute( tableId );
238                                    removeSessionAttribute( HybsSystem.VIEWFORM_KEY );
239                            }
240    
241                            return( EVAL_BODY_BUFFERED );   // Body を評価するã€? extends BodyTagSupport æ™?
242                    }
243                    return ( SKIP_BODY );                           // Body を評価しなã�?
244            }
245    
246            /**
247             * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
248             *
249             * @og.rev 3.1.1.0 (2003/03/28) ボディのå†?®¹を取得するå?ç�?‚’、CommonTagSupport で行うã€?
250             * @og.rev 3.6.0.8 (2004/11/19) エラー発生時に確実にリリースされるよã�?�« try finally 追åŠ?
251             * @og.rev 3.8.5.3 (2006/08/07) USER.LASTSQL へのSQLæ–??保存ã?、実行前に行っておきますã?
252             * @og.rev 3.8.6.3 (2006/11/30) SQL æ–??前後ã?スペã?スを取り除きますã?
253             * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
254             * @og.rev 4.0.0.0 (2005/01/31) lang â‡?ResourceManager へ変更
255             * @og.rev 4.0.0.0 (2005/08/31) useQuotCheck() による?³?±?¬インジェクション対ç­?
256             * @og.rev 4.3.4.0 (2008/12/01) GE20(ユーザー定数)へ登録するかã?フラグへの対å¿?
257             * @og.rev 5.0.0.2 (2009/09/15) XSS対å¿?
258             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??、DBTableModelが新規作æ?されたå?ç�?�§のみ行うã€?
259             * @og.rev 5.1.9.0 (2010/08/01) TransactionTag 対応ã?上位に TransactionTag があれã?、そこからConnection をもらうã€?
260             * @og.rev 5.3.6.0 (2011/06/01) é›?¨ˆã?合計などのEdit機è?に対応しますã?
261             * @og.rev 5.3.7.0 (2011/07/01) TransactionReal の引数変更
262             * @og.rev 5.3.7.0 (2011/07/01) PL/SQLかつscope="request"で正しく出力するためqueryType,namesも保存するã?
263             * @og.rev 5.3.8.0 (2011/08/01) Transaction発生ç®?‰€でclose()
264             * @og.rev 5.5.3.4 (2012/06/19) trace 時ã?、実際の検索処ç�?‚’行わなã�?§˜に変更ã€?
265             * @og.rev 5.6.5.3 (2013/06/28) LASTQUERYTYPE â‡?LASTSQLTYPE 変更ã€?
266             *
267             * @return      後続å?ç�??æŒ?¤º(SKIP_BODY)
268             */
269            @Override
270            public int doAfterBody() {
271    
272                    // 4.0.0 (2005/08/31) useQuotCheck() による?³?±?¬インジェクション対ç­?
273                    useQuotCheck( quotCheck );
274                    // 5.0.0.2 (2009/09/15) XSS対ç­?
275                    useXssCheck( xssCheck );
276    
277                    sql = getBodyString().trim();
278    
279                    // 3.2.1.0 (2003/05/28) æœ?µ‚S?±?¬æ–?‚’、UserInfo に、キャãƒ?‚·ュしておくã€?
280    //              setUserInfo( "LASTSQL", sql );
281                    // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
282                    if( isMainTrans ) {
283                            setUserInfo( "LASTSQL", sql, false );
284                            // 5.3.7.0 (2011/07/01) PL/SQLかつscope="request"で正しく出力するためqueryType,namesも保存するã?
285    //                      setUserInfo( "LASTQUERYTYPE", queryType, false );
286                            setUserInfo( "LASTSQLTYPE", queryType, false );                         // 5.6.5.3 (2013/06/28)
287                            setUserInfo( "LASTNAMES", names, false );
288                    }
289    
290                    Query query = QueryFactory.newInstance( queryType );
291                    Transaction tran = null;
292                    try {
293                            if( maxRowCount < 0 ) {
294                                    maxRowCount     = sysInt( "DB_MAX_ROW_COUNT" );
295                            }
296    
297                            // 5.1.9.0 (2010/08/01) TransactionTag 対å¿?
298    //                      final Transaction tran ;
299                            TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class );
300                            if( tranTag == null ) {
301    //                              tran = new TransactionReal( dbid,getApplicationInfo() );
302                                    tran = new TransactionReal( getApplicationInfo() );             // 5.3.7.0 (2011/07/01) 引数変更
303                            }
304                            else {
305                                    tran = tranTag.getTransaction();
306                            }
307                            query.setTransaction( dbid,tran );      // 5.1.9.0 (2010/08/01) TransactionTag 対å¿?
308    
309                            query.setSkipRowCount( skipRowCount );
310                            query.setMaxRowCount( maxRowCount );
311    //                      query.setConnectionID( dbid );
312                            query.setResourceManager( getResource() );      // 4.0.0 (2005/01/31)
313    
314                            if( trace ) {
315    //                              traceMsg = traceQuery( sql );
316                                    traceMsg = traceQuery( sql,tran );              // 5.1.9.0 (2010/08/01) TransactionTag 対å¿?
317                                    // 5.5.3.4 (2012/06/19) trace 時ã?、実際の検索処ç�?‚’行わなã�?§˜に変更
318    //                              query.setMaxRowCount( 1 );
319                                    return(SKIP_BODY);
320                            }
321                            query.setStatement( sql );
322    //                      query.setApplicationInfo( getApplicationInfo() );       // 3.8.7.0 (2006/12/15)
323    
324                            // 5.3.6.0 (2011/06/01) é›?¨ˆã?合計などのEdit機è?に対応しますã?
325                            if( isMainTrans ) {
326                                    String guikey = getGUIInfoAttri( "KEY" );
327                                    String editName = getRequestValue( "editName" );
328                                    DBEditConfig config = getUser().getEditConfig( guikey, editName );
329                                    if( config != null ) {
330                                            query.setEditConfig( config );
331                                    }
332                            }
333    
334                            execute( query );
335    
336                            executeCount = query.getExecuteCount();
337                            if( errCode < ErrorMessage.NG && executeCount >= 0 ) {            // 異常以外ã?場å�?
338                                    table = query.getDBTableModel();
339                                    // 3.8.5.1 (2006/05/08) modifyType 属æ?を追åŠ?�—ますã?
340                                    if( modifyType != null ) {
341                                            for( int row=0; row<executeCount; row++ ) {
342                                                    table.setModifyType( row,modifyType );
343                                            }
344                                    }
345                            }
346                    }
347                    finally {
348    //                      if( query != null ) { query.close(); }
349                            QueryFactory.close( query );
350                            if( tran != null ) { tran.close(); }            // 5.3.8.0 (2011/08/01) Transaction発生ç®?‰€でclose()
351                    }
352                    return(SKIP_BODY);
353            }
354    
355            /**
356             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
357             *
358             * @og.rev 2.0.0.8 (2002/10/09) command="NEW" のときã?み、displayMsg を表示させますã?
359             * @og.rev 2.1.1.4 (2002/11/25) ãƒ?ƒ�ãƒ?‚°時にæœ?µ‚SQLをユーザーæƒ??をセãƒ?ƒˆするように変更ã€?
360             * @og.rev 2.1.2.1 (2002/11/27) ErrorMessage をクリアしなã�?‚ˆã�?�«変更ã€?
361             * @og.rev 3.1.1.0 (2003/03/28) JspWriter オブジェクトã?使用ç®?‰€をã?jspPrint() を使用するように変更ã€?
362             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
363             * @og.rev 3.2.1.0 (2003/05/28) æœ?µ‚S?±?¬æ–?‚’、UserInfo に、キャãƒ?‚·ュしておくã€?
364             * @og.rev 3.3.3.3 (2003/08/06) 検索結果の件数をã?"DB.COUNT" キーでリクエストにセãƒ?ƒˆするã€?
365             * @og.rev 3.3.3.3 (2003/08/06) 検索結果をã?"DB.ERR_CODE" キーでリクエストにセãƒ?ƒˆするã€?
366             * @og.rev 3.5.4.7 (2004/02/06) 実行時間測定用のDIV要ç´?‚’出力しておきますã?
367             * @og.rev 3.5.4.9 (2004/02/25) 警告時に停止してã�?�¾したがã?継続å?ç�?�•せますã?
368             * @og.rev 3.5.5.0 (2004/03/12) ErrorMessage オブジェクトを、query がæ?功した時にもクリアするように変更
369             * @og.rev 3.5.5.2 (2004/04/02) TaglibUtil.makeHTMLErrorTable メソãƒ?ƒ‰を利用
370             * @og.rev 3.5.5.8 (2004/05/20) ErrorMessage オブジェクトを、コマンドが NEW の場合ã?み、クリア
371             * @og.rev 3.5.6.0 (2004/06/18) debugMsg 属æ?をå?力するよã�?�«修正しますã?
372             * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェãƒ?‚¯を行いますã?
373             * @og.rev 3.8.5.3 (2006/08/07) USER.LASTSQL へのSQLæ–??保存ã?、実行前に行っておきますã?
374             * @og.rev 4.0.0.0 (2006/11/14) notfoundMsg 属æ?を追åŠ??displayMsg は、VIEW_USE_DISPLAY_MSG で制御
375             * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ージリソース統å�? getResource().getMessage â‡?getResource().getLabel )
376             * @og.rev 4.3.3.0 (2008/09/22) 属æ? stopError の設定により、JSP処ç�?‚’中止するかどã�?�‹を制御しますã?
377             * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
378             * @og.rev 5.3.5.0 (2011/05/01) 処ç�?™‚é–?queryTime)などのæƒ??出力ã?有効/無効を指定しますã?
379             * @og.rev 5.5.0.3 (2012/03/13) オーバã?フローメãƒ?‚»ージが存在しなã�?�¨きã?、何もしなã�??(改行も入れなã�?
380             * @og.rev 5.5.3.4 (2012/06/19) trace 時ã?、実際の検索処ç�?‚’行わなã�?§˜に変更ã€?
381             * @og.rev 5.6.3.0 (2013/04/01) エラー時メãƒ?‚»ージ変更
382             *
383             * @return      後続å?ç�??æŒ?¤º
384             */
385            @Override
386            public int doEndTag() {
387                    debugPrint();           // 4.0.0 (2005/02/28)
388                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
389                    if( !useTag() ) { return(EVAL_PAGE); }
390    
391                    if( trace ) {
392                            jspPrint( traceMsg );
393                            return (SKIP_PAGE);             // 5.5.3.4 (2012/06/19) trace 時ã?、実際の検索処ç�?‚’行わなã�?§˜に変更ã€?
394                    }
395    
396                    String label  = "";                             // 4.0.0 (2005/11/30) 検索しなかったå?合ã?
397                    if( check( command, COMMAND_LIST ) ) {
398                            StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
399    
400                            // 実行件数の表示 command="NEW" のときã?み、displayMsg を表示させますã?
401                            // 4.0.0 (2005/11/30) 出力é?の変更。ä¸?•ªæœ??に出力しますã?
402    //                      boolean useStatusBar = HybsSystem.sysBool( "VIEW_USE_DISPLAY_MSG" );
403                            if( CMD_NEW.equals( command ) ) {
404    //                              if( useStatusBar && executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
405                                    if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
406                                            buf.append( executeCount );
407    //                                      buf.append( getResource().getMessage( displayMsg ) );
408                                            buf.append( getResource().getLabel( displayMsg ) );
409                                            buf.append( HybsSystem.BR );
410                                    }
411                                    else if( executeCount == 0 && notfoundMsg != null && notfoundMsg.length() > 0 ) {
412    //                                      buf.append( getResource().getMessage( notfoundMsg ) );
413                                            buf.append( getResource().getLabel( notfoundMsg ) );
414                                            buf.append( HybsSystem.BR );
415                                    }
416                            }
417    
418                            // 3.3.3.3 (2003/08/06) 検索結果の件数をã?"DB.COUNT" キーでリクエストにセãƒ?ƒˆするã€?
419                            setRequestAttribute( "DB.COUNT"   , String.valueOf( executeCount ) );
420                            // 3.3.3.3 (2003/08/06) 検索結果をã?"DB.ERR_CODE" キーでリクエストにセãƒ?ƒˆするã€?
421                            setRequestAttribute( "DB.ERR_CODE", String.valueOf( errCode ) );
422    
423                            // オーバã?フロー時ã?メãƒ?‚»ージを表示
424    //                      if( table != null && table.isOverflow() ) {
425                            // 5.5.0.3 (2012/03/09) オーバã?フローメãƒ?‚»ージが存在しなã�?�¨きã?、何もしなã�??(改行も入れなã�?
426                            if( table != null && table.isOverflow() && overflowMsg != null && overflowMsg.length() > 0  ) {
427    //                              buf.append( getResource().getMessage( overflowMsg ) );
428                                    buf.append( getResource().getLabel( overflowMsg ) );
429                                    buf.append( HybsSystem.BR );
430                            }
431    
432                            // 3.5.5.2 (2004/04/02) TaglibUtil.makeHTMLErrorTable メソãƒ?ƒ‰を利用
433                            String err = TaglibUtil.makeHTMLErrorTable( errMessage,getResource() );
434                            if( err != null && err.length() > 0 ) {
435                                    buf.append( err );
436                                    setSessionAttribute( errMsgId,errMessage );
437                            }
438                            else if( CMD_NEW.equals( command ) ) {          // 3.5.5.8 (2004/05/20)
439                                    removeSessionAttribute( errMsgId );
440                            }
441                            label = buf.toString();
442    
443                            if( table != null && ! commitTableObject( tableId, table ) ) {
444                                    // 3.6.0.8 (2004/11/19) トランザクションチェãƒ?‚¯を行いますã?
445                                    // jspPrint( "QueryTag Query処ç�?�Œ割り込まれましたã€?BTableModel は登録しませんã€? );
446                                    
447                                    // 5.6.4.0 (2013/04/01) リソースから出力するよã�?�«対å¿?
448                                    ErrorMessage errMsgObj = new ErrorMessage( "QueryTag Query Error!" );
449                                    errMsgObj.addMessage( 0,ErrorMessage.NG,"ERR0041" );
450                                    jspPrint( TaglibUtil.makeHTMLErrorTable( errMsgObj,getResource() ) );
451                                    
452                                    return (SKIP_PAGE);
453                            }
454                    }
455    
456                    jspPrint( label );
457    
458                    // 3.5.4.9 (2004/02/25) 警告時に停止してã�?�¾したがã?継続å?ç�?�•せますã?
459    //              int rtnCode = EVAL_PAGE;
460                    final int rtnCode ;
461                    if( errCode >= ErrorMessage.NG )  {  // 異常
462                            if( stopError ) {                               // 4.3.3.0 (2008/09/22) 属æ? stopError の設定により、å?ç�?‚’中止するかを判断しますã?
463                                    rtnCode = SKIP_PAGE;
464                            }
465                            else {
466                                    rtnCode = EVAL_PAGE;
467                            }
468                    }
469                    else {
470                            // 件数?�件かつ stopZero = true
471                            if( executeCount == 0 && stopZero )     {
472                                    rtnCode = SKIP_PAGE;
473                            }
474                            else {
475                                    rtnCode = EVAL_PAGE;
476                            }
477                    }
478    
479                    // 3.5.4.7 (2004/02/06)
480                    long dyTime = System.currentTimeMillis()-dyStart;
481    
482                    // 5.3.5.0 (2011/05/01) 処ç�?™‚é–?queryTime)などのæƒ??出力ã?有効/無効を指定しますã?
483                    if( useBeforeHtmlTag ) {
484                            jspPrint( "<div id=\"queryTime\" value=\"" + (dyTime) + "\"></div>" );      // 3.5.6.3 (2004/07/12)
485                    }
486    
487                    // 4.0.0 (2005/01/31) セキュリãƒ?‚£チェãƒ?‚¯(ãƒ??タアクセス件数登録)
488                    GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY );
489                    if( guiInfo != null ) { guiInfo.addReadCount( executeCount,dyTime,sql ); }
490    
491                    return( rtnCode );
492            }
493    
494            /**
495             * タグリブオブジェクトをリリースしますã?
496             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
497             *
498             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
499             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
500             * @og.rev 3.5.4.7 (2004/02/06) 実行時間測定用に、dyStart を追åŠ?�—ますã?
501             * @og.rev 3.5.6.0 (2004/06/18) debugMsg 属æ?を追åŠ?�—ますã?
502             * @og.rev 3.8.0.5 (2005/08/20) checkNames 属æ?を追åŠ?�—ますã?
503             * @og.rev 3.8.5.1 (2006/05/08) modifyType 属æ?を追åŠ?�—ますã?
504             * @og.rev 3.8.5.1 (2006/05/08) traceMsg 属æ?(トレース時ã?メãƒ?‚»ージæ–?­—å?)を追åŠ?�—ますã?
505             * @og.rev 4.0.0.0 (2005/08/31) quotCheck 属æ?の追åŠ?
506             * @og.rev 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
507             * @og.rev 4.3.3.0 (2008/09/22) stopError 属æ?の追åŠ?
508             * @og.rev 5.0.0.2 (2009/09/15) XSS対å¿?
509             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??、DBTableModelが新規作æ?されたå?ç�?�§のみ行うã€?
510             * @og.rev 5.3.5.0 (2011/05/01) 処ç�?™‚é–?queryTime)などのæƒ??出力ã?有効/無効を指定しますã?
511             *
512             */
513            @Override
514            protected void release2() {
515                    super.release2();
516                    tableId                 = HybsSystem.TBL_MDL_KEY;
517                    queryType               = null;
518    //              dbid                    = "DEFAULT";
519                    dbid                    = null;
520                    command                 = CMD_NEW;
521                    skipRowCount    = 0;
522                    maxRowCount             = -1;
523                    table                   = null;
524                    sql                             = null;
525    //              displayMsg              = "MSG0033";    // ã€?»¶検索しましたã€?
526                    displayMsg              = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
527                    overflowMsg             = "MSG0007";    // 検索結果がã?制限行数をè¶?�ˆましたので、残りはカãƒ?ƒˆされましたã€?
528                    notfoundMsg             = "MSG0077";    // 対象ãƒ??タはありませんでしたã€?
529                    executeCount    = -1;                   // 検索/実行件数
530                    names                   = null;
531                    outMessage              = true;
532                    trace                   = false;
533                    errCode                 = ErrorMessage.OK;
534                    errMessage              = null;
535                    stopZero                = false;
536                    stopError               = true;                 // 4.3.3.0 (2008/09/22)
537                    dyStart                 = 0;
538                    debugMsg                = null;                 // 3.5.6.0 (2004/06/18)
539                    checkNames              = null;                 // 3.8.0.5 (2005/08/20)
540                    quotCheck               = HybsSystem.sysBool( "USE_SQL_INJECTION_CHECK" );      // 4.0.0 (2005/08/31)
541                    modifyType      = null;                 // 3.8.5.1 (2006/05/08)
542                    traceMsg                = null;                 // 3.8.5.3 (2006/08/07)
543                    xssCheck                = HybsSystem.sysBool( "USE_XSS_CHECK" );        // 5.0.0.2 (2009/09/15)
544                    isMainTrans             = true;                 // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
545                    useBeforeHtmlTag        = true ;        // 5.3.5.0 (2011/05/01)
546            }
547    
548            /**
549             * Query を実行しますã?
550             *
551             * @og.rev 2.1.2.3 (2002/12/02) ãƒ??タベã?ス更新時に、更新フラグをセãƒ?ƒˆするように変更
552             * @og.rev 3.4.0.0 (2003/09/01) 登録エラー時ã?キーと値を表示するように変更ã€?
553             * @og.rev 3.5.6.0 (2004/06/18) ãƒ?ƒ�ãƒ?‚°æƒ??出力用に、printDebug メソãƒ?ƒ‰を追åŠ??
554             * @og.rev 3.6.1.0 (2005/01/05) エラーコードによる commit/rollback の判断追åŠ?
555             * @og.rev 5.3.7.0 (2011/07/01) nameの判定にゼロæ–?­—å?を付加
556             *
557             * @param       query オブジェクãƒ?
558             */
559            protected void execute( final Query query ) {
560                    String[] nameArray = null;
561                    String[] values    = null;
562                    try {
563    //                      if( names == null ) {
564                            if( names == null || names.length() == 0 ) {
565                                    query.execute();
566                            }
567                            else {
568                                    nameArray = StringUtil.csv2Array( names );
569                                    values = getRequest( nameArray );
570                                    // 3.5.6.0 (2004/06/18) ãƒ?ƒ�ãƒ?‚°æƒ??出力用
571                                    if( isDebug() ) { printDebug( nameArray,values ); }
572                                    query.execute( values );
573                            }
574                            errCode = query.getErrorCode();
575                            errMessage = query.getErrorMessage();
576                            // 3.6.1.0 (2005/01/05) エラーコードによる commit/rollback の判断追åŠ?
577    //                      if( query.getUpdateFlag() ) {
578                            if( query.isUpdate() ) {
579                                    if( errCode < ErrorMessage.NG ) {            // 異常以下ã?場å�?
580                                            query.commit();
581                                    }
582                                    else {
583                                            query.rollback();
584                                    }
585                            }
586                    }
587                    catch( HybsSystemException ex ) {
588                            query.rollback();
589    
590                            // 4.0.0 (2005/02/28) エラー時ã?表示とãƒ?ƒ�ãƒ?‚°時ã?表示を統ä¸?�™るã?
591                            String errMsg = "DATABASE ERROR! " + HybsSystem.CR ;
592                            if( nameArray != null ) {
593                                    printDebug( nameArray,values );
594                                    errMsg += debugMsg;
595                            }
596                            throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
597                    }
598                    finally {
599                            if( query != null ) { query.close(); }
600                    }
601            }
602    
603            /**
604             * ãƒ?ƒ�ãƒ?‚°用にã€??列データを書きå?しますã?
605             *
606             * @og.rev 3.5.6.0 (2004/06/18) 新規追åŠ?
607             *
608             * @param       nms     引数 names の配å?ãƒ??タ
609             * @param       vals    names に対応するリクエスト情報の配å?
610             */
611            private void printDebug( final String[] nms,final String[] vals ) {
612                    if( debugMsg == null ) { debugMsg = new StringBuilder(); }
613    
614                    debugMsg.append( "  names=[" );
615                    debugMsg.append( StringUtil.array2csv( nms ) );
616                    debugMsg.append( "]" );
617                    debugMsg.append( HybsSystem.CR );
618                    debugMsg.append( "  values=[" );
619                    debugMsg.append( StringUtil.array2csv( vals ) );
620                    debugMsg.append( "]" );
621                    debugMsg.append( HybsSystem.CR );
622            }
623    
624            /**
625             * 名称配å?をå?に、リクエスト情報のãƒ??タを取得しますã?
626             * checkNames 属æ?に設定されてã�?‚‹カラãƒ?�Œあれば、å?を正規化しますã?
627             *
628             * @og.rev 3.8.0.5 (2005/08/20) リクエスト変数の正規化(checkNames)対å¿?
629             *
630             * @param       nameArray       キーとなる名称の配å?
631             *
632             * @return      そã?リクエスト情報の配å?
633             */
634            protected String[] getRequest( final String[] nameArray ) {
635                    String[] rtn = new String[nameArray.length];
636    
637                    for( int i=0; i<rtn.length; i++ ) {
638                            rtn[i] = getRequestValue( nameArray[i] );
639    
640                            // 3.8.0.5 (2005/08/20) checkNames がありã?rtn[i] があるå?合ã?
641                            if( checkNames != null && checkNames.length() > 0 && rtn[i].length() > 0 ) {
642                                    if( ( "," + checkNames + "," ).indexOf( "," + nameArray[i] + "," ) >= 0 ) {
643                                            DBColumn dbColumn = getDBColumn( nameArray[i] );
644                                            String val = dbColumn.valueSet( rtn[i] );
645                                            if( val != null ) { rtn[i] = val; }
646                                    }
647                            }
648                    }
649    
650                    return rtn;
651            }
652    
653            /**
654             * 【TAGã€?通常は使ã�?�¾せん)ãƒ??タの読み始めの初期値を指定しますã?
655             *
656             * @og.tag
657             * ãƒ??タベã?ス自体ã?検索は,æŒ?®šされたSQLの全件を検索しますが,
658             * DBTableModelのãƒ??タとしては、スキãƒ??件数åˆ??登録されませんã€?
659             * サーバã?のメモリè³?º�と応答時間ã?確保ã?為ですã?
660             *
661             * @param       count 読み始めの初期値
662             */
663            public void setSkipRowCount( final String count ) {
664                    skipRowCount = nval( getRequestParameter( count ),skipRowCount );
665            }
666    
667            /**
668             * 【TAGã€?通常は使ã�?�¾せん)ãƒ??タのæœ?¤§読み込み件数を指定しまã�?
669             *              (初期値:DB_MAX_ROW_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#DB_MAX_ROW_COUNT}])ã€?
670             *
671             * @og.tag
672             * ãƒ??タベã?ス自体ã?検索は,æŒ?®šされたSQLの全件を検索しますが,
673             * DBTableModelのãƒ??タとして登録するæœ?¤§件数をこの値に設定しますã?
674             * サーバã?のメモリè³?º�と応答時間ã?確保ã?為ですã?
675             * 0 をセãƒ?ƒˆすると、無制é™?Integer.MAX_VALUE)になりますã?
676             * (初期値:ユーザー定数のDB_MAX_ROW_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#DB_MAX_ROW_COUNT}])ã€?
677             *
678             * @og.rev 5.5.8.5 (2012/11/27) 0を無制限として処ç�?�—ますã?
679             *
680             * @param       count æœ?¤§読み込み件数
681             * @see         org.opengion.hayabusa.common.SystemData#DB_MAX_ROW_COUNT
682             */
683            public void setMaxRowCount( final String count ) {
684                    maxRowCount = nval( getRequestParameter( count ),maxRowCount );
685                    if( maxRowCount == 0 ) { maxRowCount = Integer.MAX_VALUE ; }            // 5.5.8.5 (2012/11/27)
686            }
687    
688            /**
689             * 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
690             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
691             *
692             * @og.tag
693             * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?下流ã?viewタグ等に
694             * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
695             * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
696             * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
697             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
698             *
699             * @param       id sessionに登録する時ã? ID
700             */
701            public void setTableId( final String id ) {
702                    tableId   = nval( getRequestParameter( id ),tableId );  // 3.8.0.9 (2005/10/17)
703            }
704    
705            /**
706             * 【TAG】Query を発行する為のクラスID(JDBC,JDBCCallable,JDBCErrMsg,JDBCUpdate)を指定しまã�?{@og.doc03Link queryType 初期値:JDBC})ã€?
707             *
708             * @og.tag
709             * 検索を実行する手段は、Query インターフェースの実è£?‚¯ラスになりますã?
710             * こã?タグでは、Query.execute( String[] ) メソãƒ?ƒ‰が呼ばれますã?
711             * 例えば、ストアドã?ロシージャ等を実行するå?合に、queryType="JDBCErrMsg"
712             * を指定することができますã?
713             * 初期値はã€?JDBC" ですã?
714             * queryType は、シスãƒ?ƒ リソースの Query_**** 宣è¨?? **** を与えますã?
715             * これらã?、Query インターフェースを継承したサブクラスであるå¿?¦�がありますã?
716             * 標準で、org.opengion.hayabusa.db 以下ã? Query_**** クラスがã?Query_**** 宣è¨?と
717             * して、定義されてã�?�¾すã?
718             * 属æ?クラス定義の {@link org.opengion.hayabusa.db.Query Query} を参照願いますã?
719             * {@og.doc03Link queryType Query_**** クラス}
720             *
721             * @param       id Query を発行する為の実クラス ID
722             * @see         org.opengion.hayabusa.db.Query  Queryのサブクラス
723             * @see         org.opengion.hayabusa.db.Query#execute( String[] )
724             */
725            public void setQueryType( final String id ) {
726                    queryType = getRequestParameter( id );
727            }
728    
729            /**
730             * 【TAGã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
731             *
732             * @og.tag
733             * Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
734             * これは、シスãƒ?ƒ リソースで、DEFAULT_DB_URL 等でæŒ?®šしてã�?‚‹ ãƒ??タベã?ス接続å?
735             * æƒ??に、XX_DB_URL を定義することでã€?dbid="XX" とすると、この 接続å?を使用して
736             * ãƒ??タベã?スにアクセスできますã?
737             *
738             * @param       id ãƒ??タベã?ス接続ID
739             */
740            public void setDbid( final String id ) {
741                    dbid = nval( getRequestParameter( id ),dbid );
742            }
743    
744            /**
745             * 【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?PlsqlUpdateTag,UpdateTag の場合ã?、ENTRY)ã€?
746             *
747             * @og.tag
748             * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
749             * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
750             *
751             * @param       cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
752             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.QueryTag.CMD_NEW">コマンド定数</a>
753             */
754            public void setCommand( final String cmd ) {
755                    String cmd2 = getRequestParameter( cmd );
756                    if( cmd2 != null && cmd2.length() >= 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
757            }
758    
759            /**
760             * 【TAG】検索結果が0件のときå?ç�?‚’続行するかどã�?�‹[true/false]を指定しまã�?初期値:false[続行する])ã€?
761             *
762             * @og.tag
763             * 初期値は、false(続行すã‚?ですã?
764             *
765             * @param  cmd 検索結果が0件のときã?[true:処ç�?‚’中止する/false:続行する]
766             */
767            public void setStopZero( final String cmd ) {
768                    stopZero = nval( getRequestParameter( cmd ),stopZero );
769            }
770    
771            /**
772             * 【TAG】検索結果を画面上に表示するメãƒ?‚»ージリソースIDを指定しまã�?
773             *              (初期値:VIEW_DISPLAY_MSG[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_DISPLAY_MSG}])ã€?
774             *
775             * @og.tag
776             * ここでは、検索結果の件数ã‚?™»録された件数をまずå?力しã€?
777             * そã?次に、ここでæŒ?®šしたメãƒ?‚»ージをリソースから取得して表示しますã?
778             * 件数を表示させたい場合ã?、displayMsg = "MSG0033"[ã€?»¶検索しました] をセãƒ?ƒˆしてくださいã€?
779             * 表示させたくなã�??合ã?, displayMsg = "" をセãƒ?ƒˆしてくださいã€?
780             * (初期値:シスãƒ?ƒ 定数のVIEW_DISPLAY_MSG[={@og.value org.opengion.hayabusa.common.SystemData#VIEW_DISPLAY_MSG}])ã€?
781             *
782             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
783             * @see         org.opengion.hayabusa.common.SystemData#VIEW_DISPLAY_MSG
784             */
785            public void setDisplayMsg( final String id ) {
786                    String ids = getRequestParameter( id );
787                    if( ids != null ) { displayMsg = ids; }
788            }
789    
790            /**
791             * 【TAG】検索ãƒ??タが最大検索数をオーバã?した場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?
792             *              (初期値:MSG0007[検索結果がã?制限行数をè¶?�ˆましたので、残りはカãƒ?ƒˆされました])ã€?
793             *
794             * @og.tag
795             * 検索結果がã?maxRowCount で設定された値より多い場合ã?何らかã?ãƒ??タは検索されã�?
796             * åˆ?‚Š捨てられたことになりますã?
797             * ここでは、displayMsg を表示した後ã?å¿?¦�に応じて、このメãƒ?‚»ージを表示しますã?
798             * 表示させたくなã�??合ã?, overflowMsg = "" をセãƒ?ƒˆしてくださいã€?
799             * 初期値は、MSG0007[検索結果がã?制限行数をè¶?�ˆましたので、残りはカãƒ?ƒˆされました]ですã?
800             *
801             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
802             */
803            public void setOverflowMsg( final String id ) {
804                    String ids = getRequestParameter( id );
805                    if( ids != null ) { overflowMsg = ids; }
806            }
807    
808            /**
809             * 【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])ã€?
810             *
811             * @og.tag
812             * ここでは、検索結果がゼロ件の場合ã?み、特別なメãƒ?‚»ージを表示させますã?
813             * 従来は、displayMsg と兼用で、ã?0ã€?»¶検索しました』とã�?�†表示でしたがã?
814             * displayMsg の初期表示は、OFF になりましたので、ゼロ件の場合ã?み別に表示させますã?
815             * 表示させたくなã�??合ã?, notfoundMsg = "" をセãƒ?ƒˆしてくださいã€?
816             * 初期値は、MSG0077[対象ãƒ??タはありませんでした]ですã?
817             *
818             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
819             */
820            public void setNotfoundMsg( final String id ) {
821                    String ids = getRequestParameter( id );
822                    if( ids != null ) { notfoundMsg = ids; }
823            }
824    
825            /**
826             * 【TAG】PL/SQLを利用する場合ã?引数にセãƒ?ƒˆすべã�?ãƒ??タの名称をCSV形式でè¤?•°æŒ?®šしますã?
827             *
828             * @og.tag
829             * è¤?•°ある場合ã?、カンマ区åˆ?‚Šæ–?­—で渡しますã?
830             * names 属æ?は、queryType に応じて設定可否が異なりますã?で、ご注意くã�?�•ã�??
831             * names なし:JDBC,JDBCUpdate
832             * names あり?šJDBCCallable,JDBCErrMsg,JDBCUpdate
833             * (JDBCUpdateは、names 属æ?のあり/なし両方に対応してã�?�¾すã?)
834             *
835             * @og.rev 3.0.1.3 (2003/03/11) names 属æ?に null で渡すå?合ã?バグを修正
836             *
837             * @param       nm 引数の名称(è¤?•°ある場合ã?、カンマ区åˆ?‚Šæ–?­?
838             */
839            public void setNames( final String nm ) {
840                    names = nval( getRequestParameter( nm ),names );
841            }
842    
843            /**
844             * 【TAG】検索結果のメãƒ?‚»ージを表示する/しない[true/false]を指定しまã�?初期値:true)ã€?
845             *
846             * @og.tag
847             * 初期値は、表示する?štrue ですã?
848             *
849             * @param       flag  [true:表示する/それ以å¤?含めない]
850             */
851            public void setOutMessage( final String flag ) {
852                    outMessage = nval( getRequestParameter( flag ),outMessage );
853            }
854    
855            /**
856             * 【TAG】引数の SQL æ–?‚’ EXPLAIN PLAN を[true:行う/それ以å¤?行わない]を指定しまã�?初期値:false)ã€?
857             *
858             * @og.tag
859             *
860             * ここでは、以下ã?処ç�?‚’行いますã?
861             * ?‘.引数の SQL æ–?‚’画面に表示しますã?
862             * ?’.引数の SQL æ–?‚’ EXPLAIN PLAN した結果をã?画面に表示しますã?
863             * なおã?以前ã?、セãƒ?‚·ョンのトレースを行ってã�?�¾したがã?そã?機è?は、å»?­¢ã�?�Ÿしますã?
864             * 初期値は、行わなã�?¼šfalse ですã?
865             *
866             * @param       flag トレース [true:行う/それ以å¤?行わない]
867             */
868            public void setTrace( final String flag ) {
869                    trace = nval( getRequestParameter( flag ),trace );
870            }
871    
872            /**
873             * 【TAG】リクエスト変数の正規化を行うカラãƒ?‚’CSV形式でè¤?•°æŒ?®šしますã?
874             *
875             * @og.tag
876             * PL/SQLを利用する場合ã?引数にセãƒ?ƒˆすべã�?ãƒ??タをã?リクエスト変数の
877             * 値そã?ままではなくã?カラãƒ?‚ªブジェクトã? valueSet メソãƒ?ƒ‰経由で正規化
878             * した値を使用するようにしますã?
879             *
880             * @og.rev 3.8.0.5 (2005/08/20) 新規追åŠ?
881             *
882             * @param       nm リクエスト変数の正規化を行うカラãƒ?
883             */
884            public void setCheckNames( final String nm ) {
885                    checkNames = nval( getRequestParameter( nm ),checkNames );
886            }
887    
888            /**
889             * 【TAG】DB検索時ã? モãƒ?‚£ファイタイプをæŒ?®šします[A:追åŠ?C:更新/D:削除]ã€?
890             *
891             * @og.tag
892             * DB検索時に、そのãƒ??タをA(追åŠ?、C(更新)、D(削除)のモãƒ?‚£ファイタイプを
893             * つけた状態にしますã?
894             * そã?状態で、そのまま、update する事が可能になりますã?
895             *
896             * @og.rev 3.8.5.1 (2006/05/08) 新規追åŠ?
897             *
898             * @param   type DB検索時ã? モãƒ?‚£ファイタイãƒ?[A:追åŠ?C:更新/D:削除]
899             */
900            public void setModifyType( final String type ) {
901                    modifyType = nval( getRequestParameter( type ),modifyType );
902            }
903    
904            /**
905             * 【TAG】リクエスト情報の クォーãƒ?‚£ション(') 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?
906             *              (初期値:USE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])ã€?
907             *
908             * @og.tag
909             * ?³?±?¬インジェクション対策ã?ä¸?�¤として、暫定的ではありますが、SQLのパラメータに
910             * 渡す文字å?にクォーãƒ?‚£ション(') を許さなã�?¨­定にすれば、ある程度は防止できますã?
911             * 数字タイプã?引数にはã€?or 5=5 などのクォーãƒ?‚£ションを使用しなã�?‚³ードを埋めてもã?
912             * 数字チェãƒ?‚¯で検å?可能ですã?æ–?­—タイプã?場合ã?、å¿?�š (')をã?ずしてã€?
913             * ' or 'A' like 'A のような形式になる為ã€?')チェãƒ?‚¯ã�?�‘でも有効ですã?
914             * (') が含まれてã�?�Ÿエラーにする(true)?�かノã?チェãƒ?‚¯ã�?false)を指定しますã?
915             * 初期値は、SystemData#USE_SQL_INJECTION_CHECK ですã?
916             *
917             * @og.rev 4.0.0.0 (2005/08/31) 新規追åŠ?
918             *
919             * @param   flag クォーãƒ?‚£ションチェãƒ?‚¯ [true:する/それ以å¤?しない]
920             */
921            public void setQuotCheck( final String flag ) {
922                    quotCheck = nval( getRequestParameter( flag ),quotCheck );
923            }
924    
925            /**
926             * 【TAG】リクエスト情報の HTMLTag開å§?終äº?–‡å­?&gt;&lt;) 存在チェãƒ?‚¯を実施するかどã�?�‹[true/false]を設定しまã�?
927             *              (初期値:USE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])ã€?
928             *
929             * @og.tag
930             * クロスサイトスクリプティング(XSS)対策ã?ä¸?’°としてless/greater than signにつã�?�¦のチェãƒ?‚¯を行いますã?
931             * (&gt;&lt;) が含まれてã�?�Ÿエラーにする(true)?�かノã?チェãƒ?‚¯ã�?false)を指定しますã?
932             * (初期値:シスãƒ?ƒ 定数のUSE_XSS_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK}])
933             *
934             * @og.rev 5.0.0.2 (2009/09/15) 新規追åŠ?
935             *
936             * @param       flag    XSSチェãƒ?‚¯ [true:する/false:しない]
937             * @see         org.opengion.hayabusa.common.SystemData#USE_XSS_CHECK
938             */
939            public void setXssCheck( final String flag ) {
940                    xssCheck = nval( getRequestParameter( flag ),xssCheck );
941            }
942    
943            /**
944             * 【TAG】PLSQL/SQL処ç�?‚¨ラーの時に処ç�?‚’中止するかどã�?�‹[true/false]を設定しまã�?初期値:true)ã€?
945             *
946             * @og.tag
947             * false(中止しなã�?に設定するå?合ã?後続å?ç�?�§は、{&#064;DB.ERR_CODE}の値によりã€?
948             * PLSQL/SQLの異常/正常終äº?�«よってåˆ?²�å?ç�??可能となりますã?
949             * 初期値は、true(中止する)ですã?
950             *
951             * @og.rev 4.3.3.0 (2008/09/22) 新規追åŠ?
952             *
953             * @param   flag  [true:中止する/false:中止しない]
954             */
955            public void setStopError( final String flag ) {
956                    stopError = nval( getRequestParameter( flag ),stopError );
957            }
958    
959            /**
960             * 引数の SQL æ–?‚’ EXPLAIN PLAN しますã?
961             *
962             * ここでは、以下ã?処ç�?‚’行いますã?
963             * ?‘.引数の SQL æ–?‚’画面に表示しますã?
964             * ?’.引数の SQL æ–?‚’ EXPLAIN PLAN した結果をã?画面に表示しますã?
965             * なおã?こã?処ç�??、ORACLE 専用処ç�?�§すã?
966             *
967             * @og.rev 3.8.5.3 (2006/08/07) 新規追åŠ?
968             * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
969             * @og.rev 5.1.9.0 (2010/08/01) Transaction 対応しますã?
970             * @og.rev 5.5.3.4 (2012/06/19) getUserInfo は、キー部åˆ?� けで処ç�?�—ますã?
971             *
972             * @param   sql         EXPLAIN PLANするSQL æ–?
973             * @param   tran        Transactionオブジェクãƒ?
974             *
975             * @return トレース結果のæ–?­—å?
976             */
977    //      private String traceQuery( final String sql ) {
978            private String traceQuery( final String sql , final Transaction tran ) {
979    //              ApplicationInfo appInfo = getApplicationInfo();
980    
981    //              String userId = getUserInfo( "USER.ID" ) ;
982                    String userId = getUserInfo( "ID" ) ;                   // 5.5.3.4 (2012/06/19) getUserInfo は、キー部åˆ?� けで処ç�?�—ますã?
983    
984                    String[] arg1 = new String[] { userId };
985    //              DBUtil.dbExecute( "DELETE FROM PLAN_TABLE WHERE STATEMENT_ID = ?",arg1,appInfo,dbid );
986                    DBUtil.dbExecute( "DELETE FROM PLAN_TABLE WHERE STATEMENT_ID = ?",arg1,tran,dbid );             // 5.1.9.0 (2010/08/01)
987    
988                    String explan1 = "EXPLAIN PLAN SET STATEMENT_ID = '" + userId + "' FOR " + sql ;
989    //              DBUtil.dbExecute( explan1,null,appInfo,dbid );
990                    DBUtil.dbExecute( explan1,null,tran,dbid );             // 5.1.9.0 (2010/08/01)
991    
992                    String[] arg2 = new String[] { userId,userId,userId };
993    //              String explan2 = "SELECT LEVEL,LPAD(' ',LEVEL,' ') || RTRIM( OPERATION ) || ' ' ||"
994    //                                              + " RTRIM( OPTIONS )   || ' ' || RTRIM( OBJECT_NAME )"
995    //                                              + " FROM PLAN_TABLE"
996    //                                              + " WHERE STATEMENT_ID = ?"
997    //                                              + " CONNECT BY PRIOR ID = PARENT_ID"
998    //                                              + "         AND STATEMENT_ID = ?"
999    //                                              + " START WITH ID = 0"
1000    //                                              + "         AND STATEMENT_ID = ?" ;
1001                    String explan2 = "select LEVEL as LVL"
1002                                                            + ",lpad(' ',LEVEL,' ') || rtrim( OPERATION ) || ' ' || rtrim( OPTIONS ) || ' ' || rtrim( OBJECT_NAME ) as EXECUTION_PLAN"
1003                                                            + ",OBJECT_NAME                 as OBJ_NAME"
1004                                                            + ",DECODE(INSTR(OBJECT_TYPE,' '),0,OBJECT_TYPE,SUBSTR(OBJECT_TYPE,1,INSTR(OBJECT_TYPE,' ')-1)) as OBJ_TYPE"
1005                                                            + ",OPTIMIZER                   as OPT"
1006                                                            + ",COST                                as CST"
1007                                                            + ",CARDINALITY                 as CARD"
1008                                                            + ",BYTES                               as BYTE"
1009                                                            + ",ACCESS_PREDICATES   as ACCS"
1010                                                            + ",FILTER_PREDICATES   as FILTER"
1011                                                    + " from PLAN_TABLE"
1012                                                    + " where STATEMENT_ID = ?"
1013                                                    + " start with ID = 0"
1014                                                    + "       and STATEMENT_ID = ?"
1015                                                    + " connect by prior ID = PARENT_ID"
1016                                                    + "       and STATEMENT_ID = ?" ;
1017    //              String[][] plan = DBUtil.dbExecute( explan2,arg2,appInfo,dbid );
1018    //              String[][] plan = DBUtil.dbExecute( explan2,arg2,tran,dbid );                   // 5.1.9.0 (2010/08/01)
1019    
1020    //              StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1021    //              buf.append( "<pre>" ).append( sql ).append( "</pre>" ).append( HybsSystem.BR );
1022    //              buf.append( "<table>" );
1023    //              buf.append( "<tr  class=\"row_h\"><th>LEVEL</th><th>EXECUTION_PLAN</th></tr>" );
1024    //              for( int i=0; i<plan.length; i++ ) {
1025    //                      buf.append( "<tr class=\"row_" ).append( i%2 ).append( "\">" );
1026    //                      buf.append( "<td>" ).append( plan[i][0] ).append( "</td>" );
1027    //                      buf.append( "<td><pre>" ).append( plan[i][1] ).append( "</td></tr>" );
1028    //              }
1029    //              buf.append( "</table>" ).append( HybsSystem.BR );
1030    
1031                    String[][] plan = DBUtil.dbExecute( explan2,arg2,tran,dbid,true );                      // 5.5.3.4 (2012/06/19) ヘッãƒ??æƒ??も同時に取得するã?
1032    
1033                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1034                    buf.append( "<pre>" ).append( sql ).append( "</pre>" ).append( HybsSystem.BR );
1035                    buf.append( "<table>" );
1036                    // 1行目のヘッãƒ??の出åŠ?
1037                    int colsize = plan[0].length;
1038                    buf.append( "<tr class=\"row_h\">" );
1039                    for( int j=0; j<colsize; j++ ) {
1040                            buf.append( "<th>" ).append( plan[0][j] ).append( "</th>" );
1041                    }
1042                    buf.append( "</tr>" );
1043    
1044                    for( int i=1; i<plan.length; i++ ) {
1045                            buf.append( "<tr class=\"row_" ).append( i%2 ).append( "\">" );
1046                            for( int j=0; j<colsize; j++ ) {
1047                                    if( j==1 ) {
1048                                            buf.append( "<td><pre>" ).append( plan[i][1] ).append( "</pre></td>" );
1049                                    }
1050                                    else {
1051                                            buf.append( "<td>" ).append( plan[i][j] ).append( "</td>" );
1052                                    }
1053                            }
1054                            buf.append( "</tr>" );
1055                    }
1056                    buf.append( "</table>" ).append( HybsSystem.BR );
1057                    return buf.toString();
1058            }
1059    
1060            /**
1061             * 【TAGã€?通常使ã�?�¾せん)タグで処ç�?�•れる処ç�?�Œメインとなるトランザクション処ç�?�‹どã�?�‹を指定しまã�?初期値:true)ã€?
1062             *
1063             * @og.tag
1064             * こã?値は、ファイルãƒ?‚¦ンロードå?ç�?�«影響しますã?こã?値がtrueにæŒ?®šされた時にcommitされたDBTableModelã�?
1065             * ファイルãƒ?‚¦ンロードã?対象の表になりますã?
1066             *
1067             * こã?パラメーターはã€??常、各タグにより実è£?�•れã?ユーザーが指定するå¿?¦�ã?ありませんã€?
1068             * ä½?�—ã€?つのJSPå†?�§DBTableModelがè¤?•°生æ?されるå?合に、前に処ç�?�—たDBTableModelにつã�?�¦ファイルãƒ?‚¦ンロードをさせたい
1069             * 場合ã?、後ろでDBTableModelを生成するタグで、æ?示çš?�«こã?値をfalseにæŒ?®šすることで、ファイルãƒ?‚¦ンロードå?ç�??対象から
1070             * 除外することができますã?
1071             *
1072             * @og.rev 5.1.6.0 (2010/05/01) 新規作æ?
1073             *
1074             * @param  flag メイントランザクションかどã�?�‹
1075             */
1076            public void setMainTrans( final String flag ) {
1077                    isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
1078            }
1079    
1080            /**
1081             * 【TAGã€?処ç�?™‚é–?queryTime)などのæƒ??出力[true:有効/false:無効]を指定しまã�?初期値:true)ã€?
1082             *
1083             * @og.tag
1084             * Query で、検索する場合に、å?ç�?™‚é–?queryTime)などのæƒ??をå?力してã�?�¾すがã€?
1085             * ViewForm で、CustomData などの 非HTML表示ビューを使用する場合ã?ãƒ??タとしてã€?
1086             * 紛れ込んでしまã�?�Ÿめã?出力を抑制するå¿?¦�がありますã?
1087             * true(有効)にすると、これらのHTMLがå?力されますã?false にすると、å?力されませんã€?
1088             * 初期値は、true(有効) ですã?
1089             *
1090             * @og.rev 5.3.5.0 (2011/05/01) 新規追åŠ?
1091             *
1092             * @param  useTag  æƒ??出力ã?有効/無効を指å®?[true:有効/false:無効]
1093             */
1094            public void setUseBeforeHtmlTag( final String useTag ) {
1095                    useBeforeHtmlTag = nval( getRequestParameter( useTag ),useBeforeHtmlTag );
1096            }
1097    
1098            /**
1099             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
1100             *
1101             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
1102             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
1103             *
1104             * @param       strm    ObjectOutputStreamオブジェクãƒ?
1105             * @throws IOException  入出力エラーが発生したå?å�?
1106             */
1107            private void writeObject( final ObjectOutputStream strm ) throws IOException {
1108                    strm.defaultWriteObject();
1109            }
1110    
1111            /**
1112             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
1113             *
1114             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
1115             *
1116             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
1117             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
1118             *
1119             * @param       strm    ObjectInputStreamオブジェクãƒ?
1120             * @see #release2()
1121             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
1122             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
1123             */
1124            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
1125                    strm.defaultReadObject();
1126            }
1127    
1128            /**
1129             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
1130             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
1131             *
1132             * @return こã?クラスのæ–?­—å?表現
1133             */
1134            @Override
1135            public String toString() {
1136                    return sql ;
1137    
1138            //      return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
1139            //                      .println( "VERSION"                     ,VERSION                )
1140            //                      .println( "tableId"                     ,tableId                )
1141            //                      .println( "queryType"           ,queryType              )
1142            //                      .println( "dbid"                        ,dbid                   )
1143            //                      .println( "command"                     ,command                )
1144            //                      .println( "skipRowCount"        ,skipRowCount   )
1145            //                      .println( "maxRowCount"         ,maxRowCount    )
1146            //                      .println( "sql"                         ,sql                    )
1147            //                      .println( "displayMsg"          ,displayMsg             )
1148            //                      .println( "overflowMsg"         ,overflowMsg    )
1149            //                      .println( "executeCount"        ,executeCount   )
1150            //                      .println( "names"                       ,names                  )
1151            //                      .println( "outMessage"          ,outMessage             )
1152            //                      .println( "trace"                       ,trace                  )
1153            //                      .println( "errCode"                     ,errCode                )
1154            //                      .println( "stopZero"            ,stopZero               )
1155            //                      .println( "quotCheck"           ,quotCheck              )
1156            //                      .println( "dyStart"                     ,dyStart                )
1157            //                      .println( "checkNames"          ,checkNames             )
1158            //                      .println( "Other..."            ,getAttributes().getAttribute() )
1159            //                      .fixForm().toString() ;
1160            }
1161    }