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.util.ArrayList;
021    import java.util.List;
022    
023    import org.opengion.fukurou.util.ErrorMessage;
024    import org.opengion.hayabusa.common.HybsSystem;
025    import org.opengion.hayabusa.common.HybsSystemException;
026    import org.opengion.hayabusa.db.DBTableModel;
027    import org.opengion.hayabusa.db.Query;
028    import org.opengion.hayabusa.resource.GUIInfo;
029    
030    /**
031     * SQLæ–?‚’直接æŒ?®šã—ã¦ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?スã«è¿½åŠ?æ›´æ–°/削除を行ã„ã¾ã?queryType="JDBCTableUpdate")ã€?
032     *
033     * 存在ãƒã‚§ãƒ?‚¯ã‚’行ã†å ´åˆã?ã€tableExist ã‚¿ã‚°ã¨ä½µç”¨ã—ã¦ãã ã•ã„ã€?
034     * è¤?›‘ãªå‡¦ç?Œå¿?¦ãªå ´åˆã?ã€å¾“æ¥ã‚ˆã‚Šä½¿ç”¨ã—ã¦ã?¾ã™ã?PLSQLã‚’CALLã™ã‚‹ã€?
035     * plsqlUpdateタグを使用ã—ã¦ãã ã•ã„ã€?
036     * ã¾ãŸã?tableUpdateParam タグを使用ã™ã‚‹äº‹ã§ã€ãƒ†ãƒ¼ãƒ–ルåã¨sqlTypeã®æŒ?®šã§å‹•çš„ã«
037     * SQLæ–?‚’自動生æˆã§ãã¾ã™ã?ã“れã«ã‚ˆã‚Šã€è¿½åŠ??æ›´æ–°ã€å‰Šé™¤ã‚?ƒ†ãƒ¼ãƒ–ルã«é–¢ã—ã¦ã€?
038     * å˜ä¸??JSPç”»é¢ã§ã™ã¹ã¦å¯¾å¿œã§ãるよã†ã«ãªã‚Šã¾ã™ã?
039     *
040     * ※ ã“ã?ã‚¿ã‚°ã¯ã€Transaction ã‚¿ã‚°ã®å¯¾è±¡ã§ã™ã?
041     *
042     * @og.formSample
043     * â—å½¢å¼ï¼?lt;og:tableUpdate command="…" names="…" queryType="JDBCTableUpdate" >
044     *             {@SQL}
045     *         </og:update>
046     * â—body?šã‚ã‚?EVAL_BODY_BUFFERED:BODYを評価ã—ã?{@XXXX} ã‚’è§£æžã—ã¾ã?
047     *
048     * â—Tag定義??
049     *   <og:tableUpdate
050     *       queryType          ã€TAG】Query を発行ã™ã‚‹ç‚ºã®ã‚¯ãƒ©ã‚¹IDを指定ã—ã¾ã?{@og.doc03Link queryType åˆæœŸå€¤:JDBCTableUpdate})
051     *       sqlType            ã€TAG】BODYéƒ¨ã«æ›¸ã‹ã‚Œã¦ã?‚‹ Param ã® SQLタイプをæŒ?®šã—ã¾ã?
052     *       command            ã€TAG】コマンãƒ?NEW,RENEW)ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?PlsqlUpdateTag,UpdateTag ã®å ´åˆã?ã€ENTRY)
053     *       scope              ã€TAG】キャãƒ?‚·ãƒ¥ã™ã‚‹å ´åˆã?スコープ[request/page/session/applicaton]を指定ã—ã¾ã?åˆæœŸå€¤:session)
054     *       displayMsg         ã€TAGã€‘æ¤œç´¢çµæžœã‚’ç”»é¢ä¸Šã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?(åˆæœŸå€¤:VIEW_DISPLAY_MSG[=])
055     *       resourceType       ã€ç‰¹æ®Šã?クリアã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã®ç¨®é¡ž[GEA03/GEA04/GEA08]を指定ã—ã¾ã?
056     *       conditionKey       ã€TAG】æ¡ä»¶åˆ¤å®šã™ã‚‹ã‚«ãƒ©ãƒ?¼©?¤ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)
057     *       conditionList      ã€TAG】æ¡ä»¶åˆ¤å®šã™ã‚‹å?ã®ãƒªã‚¹ãƒˆã‚’ã€?|"ã§åŒºåˆ?£ã¦ç™»éŒ²ã—ã¾ã?åˆæœŸå€¤:ç„¡æ¡ä»¶)
058     *       tableId            ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)çµæžœã®DBTableModelã‚’ã?sessionã«ç™»éŒ²ã™ã‚‹ã¨ãã?キーを指定ã—ã¾ã?
059     *       dbid               ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)Queryオブジェクトを作æ?ã™ã‚‹æ™‚ã?DB接続IDを指定ã—ã¾ã?
060     *       selectedAll        ã€TAG】データをå?ä»¶é¸æŠžæ¸ˆã¿ã¨ã—ã¦å‡¦ç?™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
061     *       commitTableModel   ã€ç‰¹æ®Šã?SQL実行後ã«çµæžœã‚’DBTableModelã«å映ã•ã›ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:true)
062     *       followCdkh         ã€TAG】DBTableModelã®æ”¹å»ƒCã«å¾“ã£ã¦å‡¦ç?‚’行ã†ã‹ã‚’æŒ?®šã—ã¾ã?
063     *       quotCheck          ã€TAG】リクエスト情報㮠クォーãƒ?‚£ã‚·ãƒ§ãƒ³(') 存在ãƒã‚§ãƒ?‚¯ã‚’実施ã™ã‚‹ã‹ã©ã?‹[true/false]を設定ã—ã¾ã?åˆæœŸå€¤:false)
064     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
065     *   >   ... Body ...
066     *   </og:tableUpdate>
067     *
068     * â—使用ä¾?
069     *    ・QUERYã‚’ä»–ã?JSPã‹ã‚‰æ¸¡ã™å?å?
070     *    ã€copy.jspã€?
071     *        <og:hidden name="SQL" >
072     *          INSERT INTO GE41
073     *               (CLM,NAME_JA,LABEL_NAME,KBSAKU,SYSTEM_ID,LANG,
074     *               FGJ,DYSET,DYUPD,USRSET,USRUPD,PGUPD)
075     *          VALUES
076     *               ([CLM],[NAME_JA],[LABEL_NAME],[KBSAKU],[SYSTEM_ID],[LANG],
077     *               '1','{@USER.YMDH}','{@USER.YMDH}','{@USER.ID}','{@USER.ID}','{@GUI.KEY}')
078     *        </og:value>
079     *
080     *    ã€entry.jspã€?
081     *        <og:tableUpdate
082     *            command   = "{@command}"
083     *            queryType = "JDBCTableUpdate"
084     *        {@SQL}
085     *        </og:tableUpdate>
086     *
087     *    ・tableUpdateParamを使用ã™ã‚‹å ´å?
088     *    ã€entry.jspã€?
089     *        <og:tableUpdate
090     *            command   = "{@command}"
091     *            queryType = "JDBCTableUpdate"
092     *            sqlType   = "{@sqlType}"        // tableUpdateParam ã® sqlType ã¨ä¸??
093     *        >
094     *            <og:tableUpdateParam
095     *                sqlType     = "{@sqlType}"       // INSERT,COPY,UPDATE,MODIFY,DELETE
096     *                table       = "{@TABLE_NAME}"    // 処ç?¯¾è±¡ã®ãƒ??ブルå?
097     *                names       = "{@names}"         // 処ç?¯¾è±¡ã®ã‚«ãƒ©ãƒ?
098     *                omitNames   = "{@omitNames}"     // 処ç?¯¾è±¡å¤–ã?カラãƒ?
099     *                where       = "{@where}"         // 処ç?¯¾è±¡ã‚’特定ã™ã‚‹ã‚­ãƒ¼
100     *                constKeys   = "{@constKeys}"     // 処ç?‚«ãƒ©ãƒ?ã®ä¸­ã®å›ºå®šæƒ…報カラãƒ?
101     *                constVals   = "{@constVals}"     // 処ç?‚«ãƒ©ãƒ?ã®ä¸­ã®å›ºå®šæƒ…報設定å?
102     *            />
103     *        </og:tableUpdate>
104     *
105     *    ・処ç??å¯å¦ã‚’指定ã™ã‚‹å?å?
106     *    ã€entry.jspã€?
107     *        <og:tableUpdate
108     *            command   = "{@command}"
109     *            queryType = "JDBCTableUpdate"
110     *            conditionKey  ="…"      : æ¡ä»¶åˆ¤å®šã™ã‚‹ã‚«ãƒ©ãƒ?¼©?¤ã‚’指å®?åˆæœŸå€¤ã¯ columnId )
111     *            conditionList ="…"      : æ¡ä»¶åˆ¤å®šã™ã‚‹å?ã®ãƒªã‚¹ãƒˆã‚’ã€?|"ã§åŒºåˆ?£ã¦ç™»éŒ²(åˆæœŸå€¤ã¯ã€ç„¡æ¡ä»¶)
112     *        {@SQL}
113     *        </og:tableUpdate>
114     *
115     * @og.rev 3.8.8.0 (2007/12/22) æ–°è¦ä½œæ?
116     * @og.group ?¤?¢ç™»éŒ²
117     *
118     * @version  4.0
119     * @author   Kazuhiko Hasegawa
120     * @since    JDK5.0,
121     */
122    public class TableUpdateTag extends QueryTag {
123            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
124            private static final String VERSION = "5.1.7.0 (2010/06/01)" ;
125    
126            private static final long serialVersionUID = 517020100601L ;
127    
128            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ? 登録{@value} */
129            public static final String CMD_ENTRY  = "ENTRY" ;
130            /** command å¼•æ•°ã«æ¸¡ã™äº‹ã?出æ¥ã‚?コマンãƒ?リスãƒ? */
131            private static final String COMMAND_LIST = CMD_ENTRY;
132    
133            // 処ç?‚’行ã†ã€ãƒªã‚½ãƒ¼ã‚¹ã®ç¨®é¡žã‚’æŒ?®šã—ã¾ã™ã?(GEA03,GEA04,GEA08 ã®ã©ã‚Œã‹)
134            private String  sqlType                 = null;         // INSERT,COPY,UPDATE,MODIFY,DELETE
135            private String  resourceType    = null;
136            private int             resTypeColNo    = -1;
137            private String  conditionKey    = null;         // æ¡ä»¶åˆ¤å®šã™ã‚‹ã‚«ãƒ©ãƒ?¼©?¤ã‚’指å®?åˆæœŸå€¤ã¯ columnId )
138            private String  conditionList   = null;         // æ¡ä»¶åˆ¤å®šã™ã‚‹å?ã®ãƒªã‚¹ãƒˆã‚’ã€?|"ã§åŒºåˆ?£ã¦ç™»éŒ²(åˆæœŸå€¤ã¯ã€ç„¡æ¡ä»¶)
139            private boolean selectedAll             = false;
140            private boolean commitTableModel= true;         // 4.0.2.0 (2007/12/25)
141            private boolean followCdkh              = false;        // 4.3.2.0 (2008/09/09).
142            private boolean quotCheck               = false;        // 5.1.7.0 (2010/06/01) quotCheckを指定ã§ãるよã†ã«ã™ã‚‹ã€‚â?ä½?—ã€å?期å?ã¯false固定ã?タイミングを見ã¦ä¿®æ­£è¦?
143    
144            /**
145             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
146             *
147             * @og.rev 4.0.0.0 (2007/11/14) 0ä»¶ã®å ´åˆã§ã‚‚startQueryTransactionã‚’é?ã™ã‚ˆã?«å¤‰æ›´
148             * @og.rev 5.1.7.0 (2010/06/01) quotCheckを指定ã§ãるよã†ã«ã™ã‚‹ã€‚â?ä½?—ã€å?期å?ã¯false固定ã?
149             *
150             * @return      後続å?ç??æŒ?¤º( EVAL_BODY_BUFFERED )
151             */
152            @Override
153            public int doStartTag() {
154                    dyStart = System.currentTimeMillis();
155                    table = (DBTableModel)getObject( tableId );
156                    startQueryTransaction( tableId );               // 4.0.0.0 (2007/11/14) 0ä»¶ã®å ´åˆã§ã‚‚doEndã§PAGE_SKIPã—ãªã?‚ˆã?«ä½ç½®å¤‰æ›´ã€?
157                    if( table == null || table.getRowCount() == 0 ||
158                            ! check( command, COMMAND_LIST ) ) { return(SKIP_BODY); }
159    //              startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
160    //              quotCheck = false;              // ã“ã?ã‚¿ã‚°ã§ã¯ã€ã‚¯ã‚ªãƒ¼ãƒˆãƒã‚§ãƒ?‚¯ã¯è¡Œã„ã¾ã›ã‚“ã€?
161                    super.quotCheck = quotCheck;
162    
163                    return( EVAL_BODY_BUFFERED );   // Body を評価ã™ã‚‹ã€? extends BodyTagSupport æ™?
164            }
165    
166            /**
167             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
168             *
169             * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹çµ±å? getResource().getMessage â‡?getResource().getLabel )
170             *
171             * @return      後続å?ç??æŒ?¤º
172             */
173            @Override
174            public int doEndTag() {
175                    debugPrint();
176    
177    //              String label = HybsSystem.BR;                           // 検索ã—ãªã‹ã£ãŸå?åˆã?
178                    String label  = "";                             // 4.0.0 (2005/11/30) 検索ã—ãªã‹ã£ãŸå?åˆã?
179                    if( check( command, COMMAND_LIST ) ) {
180                            StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
181                            if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
182                                    buf.append( executeCount );
183    //                              buf.append( getResource().getMessage( displayMsg ) );
184                                    buf.append( getResource().getLabel( displayMsg ) );
185                                    buf.append( HybsSystem.BR );
186                            }
187    
188                            String err = TaglibUtil.makeHTMLErrorTable( errMessage,getResource() );
189                            if( err != null && err.length() > 0 ) {
190    //                              if( errCode >= ErrorMessage.NG ) {           // 異常ã®å ´å?
191    //                                      label = err ;
192    //                              }
193                                    buf.append( err );
194                                    setSessionAttribute( errMsgId,errMessage );
195                            }
196                            else {
197                                    removeSessionAttribute( errMsgId );
198                            }
199                            label = buf.toString();
200    
201                            if( table != null && ! commitTableObject( tableId, table )  ) {
202                                    // 3.6.0.8 (2004/11/19) トランザクションãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
203                                    jspPrint( "TableUpdateTag Query処ç?Œå‰²ã‚Šè¾¼ã¾ã‚Œã¾ã—ãŸã€?BTableModel ã¯ç™»éŒ²ã—ã¾ã›ã‚“ã€? );
204                                    return (SKIP_PAGE);
205                            }
206                    }
207    
208                    jspPrint( label );
209    
210                    // 警告時ã«åœæ­¢ã—ã¦ã?¾ã—ãŸãŒã?継続å?ç?•ã›ã¾ã™ã?
211    //              int rtnCode = EVAL_PAGE;
212    //              if( errCode >= ErrorMessage.NG )  {  // 異常
213    //                      rtnCode = SKIP_PAGE;
214    //              }
215    //              else {
216    //                      rtnCode = EVAL_PAGE;
217    //              }
218    
219                    long dyTime = System.currentTimeMillis()-dyStart;
220                    jspPrint( "<div id=\"queryTime\" value=\"" + (dyTime) + "\"></div>" );      // 3.5.6.3 (2004/07/12)
221    
222                    // セキュリãƒ?‚£ãƒã‚§ãƒ?‚¯(ãƒ??タアクセス件数登録)
223                    GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY );
224                    if( guiInfo != null ) { guiInfo.addWriteCount( executeCount,dyTime,sql ); }
225    
226                    int rtnCode = ( errCode >= ErrorMessage.NG ) ? SKIP_PAGE : EVAL_PAGE ;
227                    return( rtnCode );
228            }
229    
230            /**
231             * タグリブオブジェクトをリリースã—ã¾ã™ã?
232             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
233             *
234             * @og.rev 4.0.2.0 (2007/12/25) commitTableModel追�
235             * @og.rev 4.1.2.0 (2008/03/12) sqlType追�
236             * @og.rev 5.1.7.0 (2010/06/01) quotCheckを指定ã§ãるよã†ã«ã™ã‚‹ã€‚â?ä½?—ã€å?期å?ã¯false固定ã?
237             *
238             */
239            @Override
240            protected void release2() {
241                    super.release2();
242                    sqlType                 = null;         // INSERT,COPY,UPDATE,MODIFY,DELETE
243                    resourceType    = null;
244                    resTypeColNo    = -1;
245                    conditionKey    = null;         // æ¡ä»¶åˆ¤å®šã™ã‚‹ã‚«ãƒ©ãƒ?¼©?¤ã‚’指å®?åˆæœŸå€¤ã¯ columnId )
246                    conditionList   = null;         // æ¡ä»¶åˆ¤å®šã™ã‚‹å?ã®ãƒªã‚¹ãƒˆã‚’ã€?|"ã§åŒºåˆ?£ã¦ç™»éŒ²(åˆæœŸå€¤ã¯ã€ç„¡æ¡ä»¶)
247                    selectedAll             = false;
248                    commitTableModel= true;         // 4.0.2.0 (2007/12/25)
249                    followCdkh              = false;        // 4.3.2.0 (2008/09/09)
250                    quotCheck               = false;        // 5.1.7.0 (2010/06/01)
251            }
252    
253            /**
254             * Query を実行ã—ã¾ã™ã?
255             *
256             * @og.rev 4.0.2.0 (2007/12/25) commitTableModel追�
257             *
258             * @param   query オブジェク�
259             */
260            @Override
261            protected void execute( final Query query ) {
262    
263                    try {
264                            int[] rowNo = getParameterRows();               // 4.0.0 (2005/01/31)
265                            if( rowNo.length > 0 ) {
266                                    query.execute( rowNo,table );
267    
268                                    errCode = query.getErrorCode();
269                                    errMessage = query.getErrorMessage();
270    
271                                    // リソースクリア処ç?
272                                    if( resourceType != null ) {
273    //                                      if( "GEA09".equals( resourceType ) ) {
274    //                                              resTypeColNo = table.getColumnNo( "MSGCD" );    // キーã¯ã€MSGCD
275    //                                      }
276    //                                      else {
277                                            resTypeColNo = table.getColumnNo( "CLM" );              // キーã¯ã€CLM
278    //                                      }
279                                    }
280    
281                                    // é€??ã«DELETEã—ãªã?¨ã€è¡Œç•ªå·ãŒãšã‚Œã¦ã—ã¾ã??
282                                    int row;
283                                    for( int j=rowNo.length-1; j>=0; j-- ) {
284                                            row = rowNo[j];
285                                            if( resTypeColNo >= 0 ) {
286                                                    clearResourceData( table.getValue( row,resTypeColNo ) );                // リソースã®ã‚¯ãƒªã‚¢
287                                            }
288    
289                                            if( commitTableModel ) { // 4.0.2.0 (2007/12/25)
290                                                    if( DBTableModel.DELETE_TYPE.equals( table.getModifyType( row ) ) ) {
291                                                            table.removeValue( row );
292                                                    }
293                                                    else {
294                                                            table.resetModify( row );
295                                                    }
296                                            }
297                                    }
298    //                              if( query.getUpdateFlag() ) { query.commit(); }
299                                    if( query.isUpdate() ) { query.commit(); }
300                            }
301                    }
302                    finally {
303                            if( query != null ) { query.close(); }
304                    }
305            }
306    
307            /**
308             * 表示ãƒ??ã‚¿ã® HybsSystem.ROW_SEL_KEY ã‚’å?ã«ã€?¸ã°ã‚ŒãŸ 行番å·ã®
309             * é…å?ã‚’è¿”ã—ã¾ã™ã?
310             * ã“ã“ã§ã¯ã€conditionKey ã«å€¤ãŒè¨­å®šã•れã¦ã?‚‹å ´åˆã?ã€ãã®ã‚«ãƒ©ãƒ??値ã?
311             * conditionList ã«ãƒžãƒƒãƒã™ã‚‹å?åˆã?ã¿å¯¾è±¡é¸æŠžè¡Œã¨ã—ã¦è¿”ã—ã¾ã™ã?
312             * 値ãŒã‚»ãƒ?ƒˆã•れã¦ã?ªã??åˆã?ã€??常ã®CommonTagSupport#getParameterRows()
313             * ãŒå‘¼ã°ã‚Œã¾ã™ã?
314             * ãªã«ã‚‚é¸ã°ã‚Œã¦ã?ªã??åˆã?ã€ã‚µã‚¤ã‚º?ã?é…å?ã‚’è¿”ã—ã¾ã™ã?
315             *
316             * @og.rev 4.3.2.0 (2008/09/09) followCdkh属æ?対å¿?
317             *
318             * @return       (é¸ã°ã‚Œã¦ã?ªã??åˆã?ã€ã‚µã‚¤ã‚º?ã?é…å?ã‚’è¿”ã™)
319             */
320            @Override
321            protected int[] getParameterRows() {
322                    int[] rowNo ;
323                    if( selectedAll ) {
324                            int rowCnt = table.getRowCount();               // 3.5.5.7 (2004/05/10)
325                            rowNo = new int[ rowCnt ];
326                            for( int i=0; i<rowCnt; i++ ) {
327                                    rowNo[i] = i;
328                            }
329                    } else {
330                            rowNo = super.getParameterRows();               // 4.0.0 (2005/01/31)
331                    }
332    
333                    if( conditionKey != null ) {
334                            int col = table.getColumnNo( conditionKey );
335                            List<Integer> list = new ArrayList<Integer>();
336                            for( int i=0; i<rowNo.length; i++ ) {
337                                    String val = "|" + table.getValue( rowNo[i],col ) + "|";
338                                    if( conditionList.indexOf( val ) >= 0 ) {
339                                            list.add( Integer.valueOf( rowNo[i] ) );
340                                    }
341                            }
342    
343                            int size = list.size();
344                            rowNo = new int[size];
345                            for( int i=0; i<size; i++ ) {
346                                    rowNo[i] = (list.get(i)).intValue();
347                            }
348                    }
349    
350                    // 4.3.2.0 (2008/09/09)
351                    if( sqlType != null && sqlType.length() > 0 && followCdkh ) {
352                            List<Integer> flist = new ArrayList<Integer>();
353                            for( int i=0; i<rowNo.length; i++ ) {
354                                    String cdkh = table.getModifyType( rowNo[i] );
355                                    if( ( ( "INSERT".equals( sqlType ) || "COPY".equals( sqlType ) )
356                                                            && DBTableModel.INSERT_TYPE.equals( cdkh ) )
357                                            ||
358                                            ( ( "UPDATE".equals( sqlType ) || "CHANGE".equals( sqlType ) )
359                                                            && DBTableModel.UPDATE_TYPE.equals( cdkh ) )
360                                            ||
361                                            ( ( "DELETE".equals( sqlType ) )
362                                                            && DBTableModel.DELETE_TYPE.equals( cdkh ) ) ) {
363                                            flist.add(  Integer.valueOf( rowNo[i] ) );
364                                    }
365                            }
366    
367                            int size = flist.size();
368                            rowNo = new int[size];
369                            for( int i=0; i<size; i++ ) {
370                                    rowNo[i] = (flist.get(i)).intValue();
371                            }
372                    }
373    
374                    return rowNo;
375            }
376    
377            /**
378             * ã€TAG】Query を発行ã™ã‚‹ç‚ºã®ã‚¯ãƒ©ã‚¹IDを指定ã—ã¾ã?{@og.doc03Link queryType åˆæœŸå€¤:JDBCTableUpdate})ã€?
379             *
380             * @og.tag
381             * 引数æŒ?®šã?INSERT/UPDATEæ–?‚’実行ã™ã‚‹å?åˆã?ã€queryType 属æ?を使用ã—ã¾ã™ã?
382             * ã“ã?ã‚¿ã‚°ã§ã¯ã€execute( int[] ,DBTableModel )を実行ã—ã¾ã™ã?
383             * 代表çš?ªã‚¯ãƒ©ã‚¹ã¨ã—ã¦ã€?JDBCTableUpdate" ãŒæ¨™æº–ã§ç”¨æ„ã•れã¦ã?¾ã™ã?
384             *
385             * ã‚¿ã‚°ã«ã‚ˆã‚Šä½¿ç”¨ã§ãã‚‹?å?æ¥ãªã?Œã‚りã¾ã™ãŒã€ã“れã?ã€org.opengion.hayabusa.db
386             * 以下ã? Query_**** クラス㮠**** を与ãˆã¾ã™ã?
387             * ã“れらã?ã€Query インターフェースを継承ã—ãŸã‚µãƒ–クラスã§ã™ã?
388             * {@og.doc03Link queryType Query_**** クラス}
389             *
390             * @param       id Query を発行ã™ã‚‹ç‚ºã®å®Ÿã‚¯ãƒ©ã‚¹ ID
391             * @see         org.opengion.hayabusa.db.Query  Queryã®ã‚µãƒ–クラス
392             * @see         org.opengion.hayabusa.db.Query#execute( int[] ,DBTableModel )
393             */
394            @Override
395            public void setQueryType( final String id ) {
396                    super.setQueryType( nval( id,"JDBCTableUpdate" ) );
397            }
398    
399            /**
400             * resourceType ãŒè¨­å®šã•れãŸã¨ãã?ã¿ä½¿ç”¨ã•れるã?キャãƒ?‚·ãƒ¥ã®åˆæœŸåŒ–メソãƒ?ƒ‰ã§ã™ã?
401             *
402             * @param       key     åˆæœŸåŒ–を行ã†ã‚­ãƒ¼
403             */
404            private void clearResourceData( final String key ) {
405                    getResource().clear( key );
406            }
407    
408            /**
409             * ã€ç‰¹æ®Šã?クリアã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã®ç¨®é¡ž[GEA03/GEA04/GEA08]を指定ã—ã¾ã™ã?
410             *
411             * @og.tag
412             * 注æ„:ã“ã®å±žæ?ã¯ã€ãƒªã‚½ãƒ¼ã‚¹é–¢é€£DBã®ãƒ¡ãƒ³ãƒ?ƒŠãƒ³ã‚¹æ™‚ã«ã®ã¿ã€å?部リソースキャãƒ?‚·ãƒ¥ã‚?
413             * クリアã™ã‚‹ç›®çš?§ä½¿ç”¨ã—ã¾ã™ã?ä¸?ˆ¬ã®å±žæ?ã¨ã—ã¦ã¯ã€ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ãªã?Ÿã‚ã?
414             * ã”æ³¨æ„ãã?•ã??
415             * リソース関連ã®ãƒ??ブルを更新ã—ãŸå ´åˆã?リソースキャãƒ?‚·ãƒ¥ã‚’クリアã—ã¦
416             * ç½®ã‹ãªã?¨ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?スã®å€¤ãŒåæ˜?•れã¾ã›ã‚“ã€?
417             * 昔ã?ã€ãƒªã‚½ãƒ¼ã‚¹ã®æ›´æ–°ã”ã¨ã«ã€å?件クリアã—ã¦ã?¾ã—ãŸãŒã?部åˆ?‚¯ãƒªã‚¢ã?
418             * ã§ãるよã†ã«ãªã£ãŸãŸã‚ã?部åˆ?‚¯ãƒªã‚¢ã‚’行ã„ã¾ã™ã?
419             * ã“ã§ã¯ã€?GEA03,GEA04,GEA08) ã®ã©ã‚Œã‹ã‚’指定ã—ã¦ãã ã•ã„ã€?
420             *
421             * @param       type    クリアã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ?[GEA03/GEA04/GEA08]
422             */
423            public void setResourceType( final String type ) {
424                    resourceType = nval( getRequestParameter(type),resourceType );
425    
426                    if( resourceType != null &&
427    //                      "|GEA03|GEA04|GEA08|GEA09|".indexOf( "|" + resourceType + "|" ) < 0 ) {
428    //                              String errMsg = "resourceType㯠GEA03,GEA04,GEA08,GEA09 ã®ã©ã‚Œã‹ã§ã™ã?"
429    //                                                      + "resourceType=" + type ;
430                            "|GEA03|GEA04|GEA08|".indexOf( "|" + resourceType + "|" ) < 0 ) {
431                                    String errMsg = "resourceType㯠GEA03,GEA04,GEA08 ã®ã©ã‚Œã‹ã§ã™ã?"
432                                                            + "resourceType=" + type ;
433                                    throw new HybsSystemException( errMsg );
434                    }
435            }
436    
437            /**
438             * ã€TAG】æ¡ä»¶åˆ¤å®šã™ã‚‹ã‚«ãƒ©ãƒ?¼©?¤ã‚’指定ã—ã¾ã?åˆæœŸå€¤:null)ã€?
439             *
440             * @og.tag
441             * æŒ?®šã?カラãƒ?¼©?¤ã®å€¤ã¨ã€conditionList ã®å€¤ã‚’比è¼?—ã¦ã€?
442             * 存在ã™ã‚‹å ´åˆã?ã€Query 処ç?‚’実行ã—ã¾ã™ã?
443             * 例ãˆã°ã€conditionKey="CDKH" ã¨ã—ã¦ã€conditionList="A" ã¨ã™ã‚Œã°ã€?
444             * 改å»?‚³ãƒ¼ãƒ‰ãŒ"A"ã®ãƒ??ã‚¿ã§ã€ã‹ã¤é¸æŠžã•れãŸãƒ??ã‚¿ã®ã¿ã‚’å?ç?—ã¾ã™ã?
445             * 設定ã—ãªã??åˆã?ã€??常ã®å‡¦ç?¨åŒæ§˜ã«ã€?¸æŠžè¡Œã?ã¿å‡¦ç?•れã¾ã™ã?
446             *
447             * @param       key æ¡ä»¶åˆ¤å®šã™ã‚‹ã‚«ãƒ©ãƒ?¼©?¤
448             * @see         #setConditionList( String )
449             */
450            public void setConditionKey( final String key ) {
451                    conditionKey = nval( getRequestParameter( key ),null ) ;
452            }
453    
454            /**
455             * ã€TAG】æ¡ä»¶åˆ¤å®šã™ã‚‹å?ã®ãƒªã‚¹ãƒˆã‚’ã€?|"ã§åŒºåˆ?£ã¦ç™»éŒ²ã—ã¾ã?åˆæœŸå€¤:ç„¡æ¡ä»¶)ã€?
456             *
457             * @og.tag
458             * conditionKey ã¨ãƒšã‚¢ã§æŒ?®šã—ã¾ã™ã?ã“ã“ã«ã¯ã€ã‚«ãƒ©ãƒ??設定å?ã®ãƒªã‚¹ãƒˆã‚’
459             * æŒ?®šã™ã‚‹ã“ã¨ã§ã€è¤?•°æ¡ä»¶(?¯?²çµåˆ)ã§ã®æ¯”è¼?‚’行ã„ã€ãƒªã‚¹ãƒˆã«ã‚«ãƒ©ãƒ??ã?
460             * 存在ã™ã‚‹å ´åˆã?ã¿ã€Query 処ç?‚’実行ã—ã¾ã™ã?
461             * 値ãŒè¨­å®šã•れã¦ã?‚‹å ´åˆã?ã€ãã®å€¤ã¨ãƒžãƒƒãƒã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?ãªã«ã‚‚ã‚»ãƒ?ƒˆ
462             * ã•れãªã??åˆã?ã¾ãŸã?ã€null ã®å ´åˆã?ã€null ãƒ??ã‚¿ã¨ãƒžãƒƒãƒã™ã‚‹å?åˆã?ã¿å‡¦ç?
463             * ã•れã¾ã™ã?ã§ã€ã”注æ„ãã?•ã??
464             *
465             * @param       list    値ã®ãƒªã‚¹ãƒ?"|"区åˆ?
466             * @see         #setConditionKey( String )
467             */
468            public void setConditionList( final String list ) {
469                    conditionList = "|" + nval( getRequestParameter( list ),"" ) + "|" ;
470            }
471    
472            /**
473             * ã€TAG】データをå?ä»¶é¸æŠžæ¸ˆã¿ã¨ã—ã¦å‡¦ç?™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
474             *
475             * @og.tag
476             * å…¨ã¦ã®ãƒ??ã‚¿ã‚’é¸æŠžæ¸ˆã¿ãƒ??ã‚¿ã¨ã—ã¦æ‰±ã£ã¦å‡¦ç?—ã¾ã™ã?
477             * 全件処ç?™ã‚‹å?åˆã«ã€?true/false)を指定ã—ã¾ã™ã?
478             * åˆæœŸå€¤ã¯ false ã§ã™ã?
479             *
480             * @param  all ãƒ??ã‚¿ã‚’å?ä»¶é¸æŠžæ¸ˆã¿ [true:å…¨ä»¶é¸æŠžæ¸ˆã¿/false:通常]
481             */
482            public void setSelectedAll( final String all ) {
483                    selectedAll = nval( getRequestParameter( all ),selectedAll );
484            }
485    
486            /**
487             * ã€ç‰¹æ®Šã?SQL実行後ã«çµæžœã‚’DBTableModelã«å映ã•ã›ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:true)ã€?
488             *
489             * @og.tag
490             * 注æ„:ã“ã®å±žæ?ã¯ã€ãƒªã‚½ãƒ¼ã‚¹é–¢é€£DBã®ãƒ¡ãƒ³ãƒ?ƒŠãƒ³ã‚¹æ™‚ã«ã€è¤?•°DBã¸ã®ç™»éŒ²ã‚’行ã†ãŸã‚ã®ã€?
491             * 暫定対応ã¨ã—ã¦å®šç¾©ã—ã¦ã?¾ã™ã?
492             * falseã«ã—ãŸå ´åˆã?ã€å®Ÿãƒ‡ãƒ¼ã‚¿ã¨DBTableModelã®æ•´åˆæ?ãŒå–れãªããªã‚‹ãŸã‚ã?使用ã«ã¯åå?注ã—ã¦ä¸‹ã•ã??
493             * åˆæœŸå€¤ã¯ true ã§ã™ã?
494             *
495             * @og.rev 4.0.2.0 (2007/12/25) æ–°è¦ä½œæ?
496             *
497             * @param  commitTblMdl ãƒ??ブルモãƒ?ƒ«ã¸å映ã™ã‚‹ [true:åæ˜ ã™ã‚‹/false:åæ˜ ã—ãªã„]
498             */
499            public void setCommitTableModel( final String commitTblMdl ) {
500                    commitTableModel = nval( getRequestParameter( commitTblMdl ),commitTableModel );
501            }
502    
503            /**
504             * 引数ã®åç§°é…å?
505             *
506             * @return      åç§°é…å?
507             */
508            protected String[] getNames() {
509                    return table.getNames() ;
510            }
511    
512            /**
513             * ã€TAG】BODYéƒ¨ã«æ›¸ã‹ã‚Œã¦ã?‚‹ Param ã® SQLタイプをæŒ?®šã—ã¾ã™ã?
514             *
515             * @og.tag
516             * TableUpdateParamTag ã¯ã€ä¸Šä½ã? TableUpdateTag ã® sqlType 属æ? ã¨åŒã˜
517             * sqlType 属æ?ã®å ´åˆã?ã¿ã€SQLæ–?‚’åˆæ?・出力ã—ã¾ã™ã?
518             * ã¤ã¾ã‚Šã?TableUpdateTagå´ã®sqlType 属æ?をパラメータã«ã€TableUpdateParamTag
519             * ã® sqlType 属æ?を固定å?ã«ã™ã‚‹ã“ã¨ã§ã€ã©ã®ãƒ‘ラメータを使用ã™ã‚‹ã‹ã‚’
520             * é¸æŠžã§ãる機è?を実ç¾ã™ã‚‹äº‹ãŒå¯èƒ½ã§ã™ã?
521             *
522             * @og.rev 4.1.2.0 (2008/03/12) æ–°è¦è¿½åŠ?
523             *
524             * @param       type BODYéƒ¨ã«æ›¸ã‹ã‚Œã¦ã?‚‹ SQL タイãƒ?
525             */
526            public void setSqlType( final String type ) {
527                    sqlType = nval( getRequestParameter( type ),sqlType );
528            }
529    
530            /**
531             * ã€TAG】DBTableModelã®æ”¹å»ƒCã«å¾“ã£ã¦å‡¦ç?‚’行ã†ã‹ã‚’æŒ?®šã—ã¾ã™ã?
532             *
533             * @og.tag
534             * ã“ã?属æ?ã¯ã€sqlTypeãŒæŒ‡å®šã•れã¦ã?‚‹å ´åˆã?ã¿æœ‰åйã§ã™ã?
535             * sqlTypeãŒæŒ‡å®šã•れã¦ã?‚‹å ´åˆã?ãã?sqlTypeã«å¯¾å¿œã—ãŸã?改廃CãŒè¨­å®šã•れã¦ã?‚‹
536             * 行ã?ã¿ã‚’å?ç?—ã¾ã™ã?
537             * 対応関係ã?ã€ä»¥ä¸‹ã?通りã§ã™ã?
538             *  sqlType = "INSERT" or "COPY" â‡?改廃C='A'ã®ã¿å‡¦ç?
539             *  sqlType = "UPDATE" or "CHANGE" â‡?改廃C='C'ã®ã¿å‡¦ç?
540             *  sqlType = "DELETE" â‡?改廃C='D'ã®ã¿å‡¦ç?
541             *
542             * @og.rev 4.3.2.0 (2008/09/09) æ–°è¦è¿½åŠ?
543             *
544             * @param       flg DBTableModelã®æ”¹å»ƒCã«å¾“ã£ã¦å‡¦ç?‚’行ã†ã?
545             */
546            public void setFollowCdkh( final String flg ) {
547                    followCdkh = nval( getRequestParameter( flg ),followCdkh );
548            }
549    
550            /**
551             * ã€TAG】リクエスト情報㮠クォーãƒ?‚£ã‚·ãƒ§ãƒ³(') 存在ãƒã‚§ãƒ?‚¯ã‚’実施ã™ã‚‹ã‹ã©ã?‹[true/false]を設定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
552             *
553             * @og.tag
554             * ?³?±?¬ã‚¤ãƒ³ã‚¸ã‚§ã‚¯ã‚·ãƒ§ãƒ³å¯¾ç­–ã?ä¸?¤ã¨ã—ã¦ã€æš«å®šçš„ã§ã¯ã‚りã¾ã™ãŒã€SQLã®ãƒ‘ラメータã«
555             * æ¸¡ã™æ–‡å­—å?ã«ã‚¯ã‚©ãƒ¼ãƒ?‚£ã‚·ãƒ§ãƒ³(') を許ã•ãªã?¨­å®šã«ã™ã‚Œã°ã€ã‚る程度ã¯é˜²æ­¢ã§ãã¾ã™ã?
556             * 数字タイプã?引数ã«ã¯ã€?or 5=5 ãªã©ã®ã‚¯ã‚©ãƒ¼ãƒ?‚£ã‚·ãƒ§ãƒ³ã‚’使用ã—ãªã?‚³ãƒ¼ãƒ‰ã‚’埋ã‚ã¦ã‚‚ã?
557             * æ•°å­—ãƒã‚§ãƒ?‚¯ã§æ¤œå?å¯èƒ½ã§ã™ã?æ–?­—タイプã?å ´åˆã?ã€å¿?š (')ã‚’ã?ãšã—ã¦ã€?
558             * ' or 'A' like 'A ã®ã‚ˆã†ãªå½¢å¼ã«ãªã‚‹ç‚ºã€?')ãƒã‚§ãƒ?‚¯ã?‘ã§ã‚‚有効ã§ã™ã?
559             * (') ãŒå«ã¾ã‚Œã¦ã?Ÿã‚¨ãƒ©ãƒ¼ã«ã™ã‚‹(true)?ã‹ãƒŽã?ãƒã‚§ãƒ?‚¯ã?false)を指定ã—ã¾ã™ã?
560             * ※(ä»–ã?ã‚¿ã‚°ã¯ã€ã‚·ã‚¹ãƒ?ƒ ãƒªã‚½ãƒ¼ã‚¹ã®USE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}])
561             * ã§ã™ãŒã€JSPã®äº’æ›æ€§ã‚’è?æ…®ã—ã?åˆæœŸå€¤ã‚’固定ã§falseã«ã—ã¦ã?¾ã?
562             *
563             * @og.rev 5.1.7.0 (2010/06/01) æ–°è¦è¿½åŠ?
564             *
565             * @param   flag クォーãƒ?‚£ã‚·ãƒ§ãƒ³ãƒã‚§ãƒ?‚¯ [true:ã™ã‚‹/ãれ以å¤?ã—ãªã„]
566             */
567            @Override
568            public void setQuotCheck( final String flag ) {
569                    quotCheck = nval( getRequestParameter( flag ),quotCheck );
570            }
571    
572            /**
573             * SQLタイプを返ã—ã¾ã™ã?
574             *
575             * @og.rev 4.1.2.0 (2008/03/12) æ–°è¦è¿½åŠ?
576             *
577             * @return      SQLタイ�
578             */
579            protected String getSqlType() {
580                    return sqlType ;
581            }
582    
583            /**
584             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
585             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
586             *
587             * @og.rev 4.0.2.0 (2007/12/25) resourceColumnã€commitTableModel追åŠ?
588             *
589             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
590             */
591            @Override
592            public String toString() {
593                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
594                                    .println( "VERSION"                     ,VERSION                )
595                                    .println( "resourceType"        ,resourceType   )
596                                    .println( "resTypeColNo"        ,resTypeColNo   )
597                                    .println( "conditionKey"        ,conditionKey   )
598                                    .println( "conditionList"       ,conditionList  )
599                                    .println( "followCdkh"          ,followCdkh             )
600                                    .println( "CMD_ENTRY"           ,CMD_ENTRY              )
601                                    .println( "commitTabelModel",commitTableModel )         // 4.0.2.0 (2007/12/25)
602                                    .println( "sql"                         ,sql                    )               // 4.1.2.0 (2008/03/12)
603                                    .println( "Other..."    ,getAttributes().getAttribute() )
604                                    .fixForm().toString()
605                            + HybsSystem.CR
606                            + super.toString() ;
607            }
608    }