001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.hayabusa.db.DBTableModel;
021    import org.opengion.fukurou.db.DBUtil;
022    
023    import org.opengion.fukurou.util.ErrorMessage;
024    import org.opengion.fukurou.util.StringUtil ;
025    import static org.opengion.fukurou.util.StringUtil.nval ;
026    import org.opengion.fukurou.model.Formatter;
027    
028    import java.util.Locale ;
029    import java.util.List ;
030    import java.util.ArrayList ;
031    
032    import java.io.ObjectOutputStream;
033    import java.io.ObjectInputStream;
034    import java.io.IOException;
035    
036    /**
037     * 【å»?­¢】登録すべきデータのマスタ存在チェãƒ?‚¯を行うためのタグでã�?通常はentry.jspでupdateタグの直前で使用しまã�?ã€?
038     *
039     * こã?要ç´??å†?®¹に、SQLæ–?‚’記述しますã?
040     * names に対応するカラãƒ?��をã?カンマ区åˆ?‚Šでè¤?•°与えますã?そã?値をã?DBTableModel
041     * より、取得し、å?のSQLæ–?? ? に値を設定しますã?
042     * またã?、引数部に、[カラãƒ?��]を用ã�?�ŸHybs拡張SQLæ–?‚’æŒ?®šすることも可能ですã?
043     *
044     * 値の取得ã?、å?に選択された行ã?みにつã�?�¦、実行されますã?
045     * exist 属æ?にæŒ?®šされた ã€?½¢true:存在する?£ã€?½¢false:存在しなã�?½£ã€?½¢one:ひとつ以下」ã€?
046     * の値は、チェãƒ?‚¯方法を設定してã�?�¾すã?
047     * ã�?�šれã?場合も、æ?立時は、正常とみなしますã?
048     * (?¢true:存在する?£ には、データが存在した場合にã€?¼¯?«で、なければエラーですã?)
049     *
050     * @og.formSample
051     * ●形式ï¼?
052     *       ・<og:tableExist
053     *                    command   = "{@command}"
054     *                    names     = "[…]"
055     *                    from      = "…"                           å¿??
056     *                    where     = "…"                           å¿??
057     *                    exist     = "[auto|true|false|one|notuse]" å¿??
058     *                    errRemove = "[true|false]"
059     *         />
060     *
061     * ●body?šなã�?
062     *
063     * ●Tag定義??
064     *   <og:tableExist
065     *       command            【å»?­¢】コマンãƒ?ENTRY)をセãƒ?ƒˆしまã�?
066     *       scope              【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
067     *       names              【å»?­¢】引数にセãƒ?ƒˆすべã�?ãƒ??タの名称(カラãƒ?��)をCSV形式でè¤?•°æŒ?®šしまã�?
068     *       from             ○ã?å»?­¢】チェãƒ?‚¯するãƒ??タベã?スå�?from 句)を指定しまã�?å¿??)ã€?
069     *       where            ○ã?å»?­¢】チェãƒ?‚¯する検索条件(where句)を指定しまã�?å¿??)ã€?
070     *       exist              【å»?­¢】データベã?スのチェãƒ?‚¯方æ³?auto/true/false/one/notuse)を指定しまã�?初期値:?¢auto:自動」)
071     *       tableId            【å»?­¢ã€?通常は使ã�?�¾せん)結果をDBTableModelに書き込んで、sessionに登録するときã?キーを指定しまã�?
072     *       dbid               【å»?­¢ã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しまã�?
073     *       errRemove          【å»?­¢】エラー時ã?選択行を取り除ã�?�¦継続å?ç�?‚’行うかどã�?�‹[true/false]を指定しまã�?初期値:false)
074     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
075     *   />
076     *
077     * ●使用ä¾?
078     *       ・<og:tableExist
079     *                    command = "{@command}"
080     *                    names   = "USERID,SYSTEM_ID"
081     *                    from    = "GE10"
082     *                    where   = "USERID=? AND SYSTEM_ID=?"
083     *                    exist   = "true"         />
084     *
085     *          ・where 条件の ? æ–?­—に、names でæŒ?®šしたカラãƒ?��の値がã?DBTableModelより
086     *            取得されますã?
087     *            値の取得ã?、å?に選択された行ã?みにつã�?�¦、実行されますã?
088     *          ・exist 属æ?の値に応じて、チェãƒ?‚¯方法が異なりますã?
089     *            auto , true , false , one , notuse が指定できますã?
090     *          ・ãƒ??ブルはã€?¼‘つのみæŒ?®šできますã?è¤?•°æŒ?®šや、UNIONで結合する場合ã?ã€?
091     *            ビュー等を作æ?して対応してくださいã€?
092     *
093     *       ・<og:tableExist
094     *                    command = "{@command}"
095     *                    from    = "GE10"
096     *                    where   = "USERID=[USERID] AND SYSTEM_ID=[SYSTEM_ID]"  />
097     *
098     *          ・where 条件の [カラãƒ?��] æ–?­—に、DBTableModelより値がセãƒ?ƒˆされますã?
099     *          ・exist は、å?期å?(auto)になりますã?å†?ƒ¨のA,C,Dに応じて自動判別しますã?
100     *
101     * @og.rev 3.5.0.0 (2003/09/17) 新規作æ?
102     * @og.group (å»?­¢)?¤?¢登録
103     *
104     * @version  4.0
105     * @author       Kazuhiko Hasegawa
106     * @since    JDK5.0,
107     * @deprecated 代わりに dataCheckタグを使用してください
108     */
109    @Deprecated public class TableExistTag extends CommonTagSupport {
110            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
111            private static final String VERSION = "4.0.0.0 (2007/11/28)" ;
112    
113            private static final long serialVersionUID = 400020071128L ;
114    
115            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? エントリー {@value} */
116            public static final String CMD_ENTRY   = "ENTRY" ;
117    
118            /** command 引数に渡す事ã?出来ã‚?コマンãƒ?リスãƒ? */
119            private static final String COMMAND_LIST = CMD_ENTRY;
120    
121            // 3.5.6.0 (2004/06/18) すべてã‚?protected から private に変更しますã?
122            private transient DBTableModel  table           = null;
123            private transient ErrorMessage  errMessage      = null;
124            private String                  tableId         = HybsSystem.TBL_MDL_KEY;
125            // 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
126    //      private String                  dbid            = "DEFAULT";
127            private String                  dbid            = null;
128            private String                  command         = CMD_ENTRY;
129            private String                  sql                     = null;
130            private String                  names           = null;
131            private String                  from            = null;
132            private String                  where           = null;
133            private String                  exist           = "auto";
134            private boolean                 errRemove       = false;
135    
136            /**
137             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
138             *
139             * @og.rev 3.7.1.0 (2005/04/15) notuse 値を追åŠ?
140             *
141             * @return      後続å?ç�??æŒ?¤º(SKIP_BODY)
142             */
143            @Override
144            public int doStartTag() {
145                    if( !exist.equalsIgnoreCase( "notuse" ) ) {
146                            table = (DBTableModel)getObject( tableId );
147                            if( table != null && table.getRowCount() > 0 && check( command, COMMAND_LIST ) ) {
148                                    sql = makeSQLString();
149                                    execute( sql );
150                            }
151                    }
152    
153                    return(SKIP_BODY);                              // Body を評価しなã�?
154            }
155    
156            /**
157             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
158             *
159             * @og.rev 3.5.4.2 (2003/12/15) HTMLTableViewForm クラス名変更(â‡?ViewForm_HTMLTable)
160             * @og.rev 3.5.4.4 (2004/01/16) エラー結果を表示するãƒ??ブル形式ã?フォーãƒ?¿®正
161             * @og.rev 3.5.5.2 (2004/04/02) TaglibUtil.makeHTMLErrorTable メソãƒ?ƒ‰を利用
162             *
163             * @return      後続å?ç�??æŒ?¤º
164             */
165            @Override
166            public int doEndTag() {
167                    debugPrint();           // 4.0.0 (2005/02/28)
168    
169                    int rtnCode = EVAL_PAGE;
170    
171                    if( CMD_ENTRY.equals( command ) && errMessage != null && ! errMessage.isOK() ) {
172                    // 3.5.5.2 (2004/04/02) TaglibUtil.makeHTMLErrorTable メソãƒ?ƒ‰を利用
173                            if( !errRemove ) {
174                                    rtnCode = SKIP_PAGE ;
175                                    jspPrint( TaglibUtil.makeHTMLErrorTable( errMessage,getResource() ) );
176                            }
177                    }
178    
179                    return( rtnCode );
180            }
181    
182            /**
183             * タグリブオブジェクトをリリースしますã?
184             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
185             *
186             * @og.rev 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
187             */
188            @Override
189            protected void release2() {
190                    super.release2();
191                    tableId                 = HybsSystem.TBL_MDL_KEY;
192    //              dbid                    = "DEFAULT";
193                    dbid                    = null;
194                    command                 = CMD_ENTRY;
195                    table                   = null;
196                    sql                             = null;
197                    names                   = null;
198                    errMessage              = null;
199                    exist                   = "auto";
200                    errRemove               = false;
201            }
202    
203            /**
204             * SQLæ–?‚’構築しますã?
205             *
206             * @return 構築された、SQLæ–?
207             */
208            private String makeSQLString() {
209                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
210                    rtn.append( "select count(*) from " );
211                    rtn.append( from );
212                    rtn.append( " where " );
213                    rtn.append( where );
214    
215                    return rtn.toString();
216            }
217    
218            /**
219             * Query を実行しますã?
220             *
221             * @param   sql 検索æ–?­—å?
222             *
223             * @og.rev 3.8.6.0 (2006/09/29) exist 属æ?の one ã‚??¢one:ひとつのみ?£から?¢one:ひとつ以下」に変更
224             * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
225             * @og.rev 4.0.0.0 (2005/01/31) getParameterRows() を使用するように変更
226             * @og.rev 4.0.0.0 (2007/11/28) 論理処ç�??不å?合修正(カãƒ?‚³の付ける位置間違ã�?
227             */
228            private void execute( final String sql ) {
229                    errMessage = new ErrorMessage( "Database Exist Data Error!" );
230    
231                    final String query ;
232                    final int[]  clmNo ;
233    
234                    int[] rowNo = getParameterRows();               // 4.0.0 (2005/01/31)
235                    if( rowNo.length == 0 ) { return; }
236    
237                    // names なしã?場合ã?、Query より取得するã?  4.0.0 (2005/01/31)
238                    if( names == null ) {
239    //                      QueryForm form = new QueryForm( sql,table );
240    //                      clmNo = form.getColumnNos();
241    //                      query = form.getStatement();
242    //                      names = StringUtil.array2csv( form.getColumnNames() );
243    
244                            Formatter format = new Formatter( table );
245                            format.setFormat( sql );
246                            query = format.getQueryFormatString();
247                            clmNo = format.getClmNos();
248                            names = StringUtil.array2csv( table.getNames() );
249                    }
250                    else {
251                            clmNo = getTableColumnNo( StringUtil.csv2Array( names ) );
252                            query = sql;
253                    }
254    
255                    int row;
256                    boolean okFlag ;
257                    List<Integer> list = new ArrayList<Integer>();
258                    String[] values ;
259                    for( int j=0; j<rowNo.length; j++ ) {
260                            okFlag = true;
261                            row = rowNo[j];
262                            values = getTableModelData( clmNo,row );
263                            int cnt = DBUtil.dbExist( query,values,getApplicationInfo(),dbid );
264    
265                            String modifyType = table.getModifyType( row );
266                            if( ( exist.equalsIgnoreCase( "true" ) ||
267                                    ( exist.equalsIgnoreCase( "auto" ) && (
268                                                    DBTableModel.UPDATE_TYPE.equals( modifyType ) ||
269                                                    DBTableModel.DELETE_TYPE.equals( modifyType ) ) ) ) && cnt <= 0 ) {
270                                    // ERR0025=ãƒ??タ未登録エラー。キー={0}、å?={1} のãƒ??タは、存在してã�?�¾せんã€?
271                                    String vals = StringUtil.array2csv( values );
272                                    errMessage.addMessage( row,ErrorMessage.NG,"ERR0025",names,vals );
273                                    okFlag = false;
274                            }
275                            // 4.0.0.0 (2007/11/28) 論理処ç�??不å?合修正(カãƒ?‚³の付ける位置間違ã�?
276                            else if( ( exist.equalsIgnoreCase( "false" ) ||
277                                             ( exist.equalsIgnoreCase( "auto" ) &&
278                                                            DBTableModel.INSERT_TYPE.equals( modifyType ) ) ) && cnt > 0 ) {
279                                    // ERR0026=ãƒ??タ登録済みエラー。キー={0}、å?={1} のãƒ??タは、すでに存在してã�?�¾すã?
280                                    String vals = StringUtil.array2csv( values );
281                                    errMessage.addMessage( row,ErrorMessage.NG,"ERR0026",names,vals );
282                                    okFlag = false;
283                            }
284                            else if( exist.equalsIgnoreCase( "one" ) && cnt > 1 ) {
285                                    // ERR0027=ãƒ??タ?’重登録エラー。キー={0}、å?={1} のãƒ??タはã€?‡�è¤?�—て存在してã�?�¾すã?
286                                    String vals = StringUtil.array2csv( values );
287                                    errMessage.addMessage( row,ErrorMessage.NG,"ERR0027",names,vals );
288                                    okFlag = false;
289                            }
290                            if( errRemove && okFlag ) { list.add( row ); }
291                    }
292                    if( errRemove ) {
293                            Integer[] in = list.toArray( new Integer[list.size()] );
294                            int[] newRowNo = new int[in.length];
295                            for( int i=0; i<in.length; i++ ) {
296                                    newRowNo[i] = in[i].intValue();
297                            }
298                            setParameterRows( newRowNo );
299                    }
300            }
301    
302            /**
303             * 【å»?­¢ã€?通常は使ã�?�¾せん)結果をDBTableModelに書き込んで、sessionに登録するときã?キーを指定しますã?
304             *
305             * @og.tag
306             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
307             *
308             * @param       id sessionに登録する時ã? ID
309             * @deprecated クラスがå»?­¢されましたã€?
310             */
311            @Deprecated public void setTableId( final String id ) {
312                    tableId   = nval( getRequestParameter( id ),tableId );  // 3.8.0.9 (2005/10/17)
313            }
314    
315            /**
316             * 【å»?­¢ã€?通常は使ã�?�¾せん)Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
317             *
318             * @og.tag Queryオブジェクトを作æ?する時ã?DB接続IDを指定しますã?
319             *
320             * @param       id ãƒ??タベã?ス接続ID
321             * @deprecated クラスがå»?­¢されましたã€?
322             */
323            @Deprecated public void setDbid( final String id ) {
324                    dbid = nval( getRequestParameter( id ),dbid );
325            }
326    
327            /**
328             * 【å»?­¢】コマンãƒ?ENTRY)をセãƒ?ƒˆしますã?
329             *
330             * @og.tag
331             * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
332             * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
333             *
334             * @param       cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
335             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.TableExistTag.CMD_NEW">コマンド定数</a>
336             * @deprecated クラスがå»?­¢されましたã€?
337             */
338            @Deprecated public void setCommand( final String cmd ) {
339                    String cmd2 = getRequestParameter( cmd );
340                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
341            }
342    
343            /**
344             * 【å»?­¢】引数にセãƒ?ƒˆすべã�?ãƒ??タの名称(カラãƒ?��)をCSV形式でè¤?•°æŒ?®šしますã?
345             *
346             * @og.tag
347             * è¤?•°ある場合ã?、カンマ区åˆ?‚Šæ–?­—で渡しますã?
348             * 引数をnames ではなくã?[カラãƒ?��]形式で直接æŒ?®šするほã�?�Œ、SQLæ–?�Œ判りやすくなりますã?
349             *
350             * @param       nm 引数の名称(è¤?•°ある場合ã?、カンマ区åˆ?‚Šæ–?­?
351             * @deprecated クラスがå»?­¢されましたã€?
352             */
353            @Deprecated public void setNames( final String nm ) {
354                    names = nval( getRequestParameter( nm ),names );
355            }
356    
357            /**
358             * 【å»?­¢】チェãƒ?‚¯するãƒ??タベã?スå�?from 句)を指定しますã?
359             *
360             * @og.tag
361             * from 句 にæŒ?®šするデータベã?ス名ですã?
362             *
363             * @param       fm ãƒ??タベã?スID
364             * @deprecated クラスがå»?­¢されましたã€?
365             */
366            @Deprecated public void setFrom( final String fm ) {
367                    from = nval( getRequestParameter( fm ),from );
368            }
369    
370            /**
371             * 【å»?­¢】チェãƒ?‚¯する検索条件(where句)を指定しますã?
372             *
373             * @og.tag
374             * where 区 にæŒ?®šする検索条件ですã?? の部åˆ?�«、names 属æ?でæŒ?®šしã�?
375             * カラãƒ??ãƒ??タがã?DBTableModelより取り出されて適用されますã?
376             * またã?、[カラãƒ?��]形式で、直接æŒ?®šすることもできますã?そã?場合ã?ã€?
377             * name 属æ?はæŒ?®šするå¿?¦�がありませんã€?
378             * [カラãƒ?��]の前後にã€?')シングルコーãƒ??ションは、不要ですã?
379             *
380             * @param       wr 検索条件(where句)
381             * @deprecated クラスがå»?­¢されましたã€?
382             */
383            @Deprecated public void setWhere( final String wr ) {
384                    where = nval( getRequestParameter( wr ),where );
385            }
386    
387            /**
388             * 【å»?­¢】データベã?スのチェãƒ?‚¯方æ³?auto/true/false/one/notuse)を指定しまã�?初期値:?¢auto:自動」)ã€?
389             *
390             * @og.tag
391             * exist 属æ?にæŒ?®šされた ã€?½¢true:存在する?£ã€?½¢false:存在しなã�?½£ã€?½¢one:ひとつ以下」ã€?
392             * の値は、いずれの場合も、æ?立時は、正常とみなしますã?
393             * ?¢auto:自動」は、DBTableModeleのmodifyType(A,C,D)に応じて、チェãƒ?‚¯しますã?
394             * A,C,D は、entryタグにコマンドを渡してãƒ??タを作æ?したときに、å?部で作æ?されますã?
395             * notuse は、チェãƒ?‚¯を行いません。これã?、このタグをå?有使用する場合に、外部で
396             * チェãƒ?‚¯を行うかどã�?�‹を指定できるようにするために使用しますã?
397             * (?¢true:存在する?£ には、データが存在した場合にã€?¼¯?«で、なければエラーですã?)
398             * 初期値はã€?½¢auto:自動」ですã?
399             *
400             * @param       ext チェãƒ?‚¯方æ³??¢auto:自動」ã€?½¢true:存在する?£ã€?½¢false:存在しなã�?½£ã€?½¢one:ひとつ以下」ã€?½¢notuse:チェãƒ?‚¯しなã�?½£)
401             * @deprecated クラスがå»?­¢されましたã€?
402             */
403            @Deprecated public void setExist( final String ext ) {
404                    exist = nval( getRequestParameter( ext ),exist );
405                    if( !"auto".equalsIgnoreCase( exist ) &&
406                            !"true".equalsIgnoreCase( exist ) &&
407                            !"false".equalsIgnoreCase( exist ) &&
408                            !"one".equalsIgnoreCase( exist ) &&
409                            !"notuse".equalsIgnoreCase( exist ) ) {
410                                    String errMsg = "exist 属æ?はã€?auto,true,false,one,notuse)を指定してくださいã€?[" + exist + "]" + HybsSystem.CR ;
411                                    throw new HybsSystemException( errMsg );
412                    }
413            }
414    
415            /**
416             * 【å»?­¢】エラー時ã?選択行を取り除ã�?�¦継続å?ç�?‚’行うかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
417             *
418             * @og.tag
419             * exist 属æ?にæŒ?®šされた ã€?½¢true:存在する?£ã€?½¢false:存在しなã�?½£ã€?½¢one:ひとつ以下」ã€?
420             * に対して、エラーが発生した選択行番号をã?取り除ã�?�¦以下ã?処ç�?‚’継続するかどã�?�‹ã‚?
421             * æŒ?®šしますã?
422             * true に設定したå?合ã?、エラーãƒ??タを削除しã?継続å?ç�?‚’行うことができますã?
423             * flase の場合ã?、エラーãƒ??タを表示して、継続å?ç�?‚’停止しますã?
424             * 初期値はã€?½¢false:エラー時停止?£ですã?
425             *
426             * @param       flag エラー時ã?継続å?ç�?[true:エラー行番号を取り除き継続å?ç�?false:エラー時停止]
427             * @deprecated クラスがå»?­¢されましたã€?
428             */
429            @Deprecated public void setErrRemove( final String flag ) {
430                    errRemove = nval( getRequestParameter( flag ),errRemove );
431            }
432    
433            /**
434             *  カラãƒ?��配å?(String[])より、対応するカラãƒ?o配å?(int[])を作æ?しますã?
435             *
436             * @param       nameArray カラãƒ?��配å?
437             *
438             * @return      カラãƒ?o配å?
439             */
440            private int[] getTableColumnNo( final String[] nameArray ) {
441                    int[] clmNo = new int[ nameArray.length ];
442                    for( int i=0; i<clmNo.length; i++ ) {
443                            clmNo[i] = table.getColumnNo( nameArray[i] );
444                    }
445                    return clmNo;
446            }
447    
448            /**
449             *  æŒ?®šã?行番号の、カラãƒ?o配å?(int[])に対応したå?の配å?を返しますã?
450             *
451             * 表示ãƒ??タの HybsSystem.ROW_SEL_KEY をå?にã€?�¸ばれた 行を
452             * 処ç�??対象としますã?
453             *
454             * @param       clmNo   カラãƒ?o配å?
455             * @param       row             行番号
456             *
457             * @return      行番号とカラãƒ?o配å?に対応したã?値の配å?
458             */
459            private String[] getTableModelData( final int[] clmNo,final int row ) {
460                    String[] values = new String[ clmNo.length ];
461                    for( int i=0; i<values.length; i++ ) {
462                            values[i] = table.getValue( row,clmNo[i] ) ;
463                    }
464                    return values;
465            }
466    
467            /**
468             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
469             *
470             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
471             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
472             *
473             * @param       strm    ObjectOutputStreamオブジェクãƒ?
474             * @throws IOException  入出力エラーが発生したå?å�?
475             */
476            private void writeObject( final ObjectOutputStream strm ) throws IOException {
477                    strm.defaultWriteObject();
478            }
479    
480            /**
481             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
482             *
483             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
484             *
485             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
486             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
487             *
488             * @param       strm    ObjectInputStreamオブジェクãƒ?
489             * @see #release2()
490             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
491             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
492             */
493            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
494                    strm.defaultReadObject();
495            }
496    
497            /**
498             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
499             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
500             *
501             * @return こã?クラスのæ–?­—å?表現
502             */
503            @Override
504            public String toString() {
505                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
506                                    .println( "VERSION"             ,VERSION        )
507                                    .println( "tableId"             ,tableId        )
508                                    .println( "dbid"                ,dbid           )
509                                    .println( "command"             ,command        )
510                                    .println( "sql"                 ,sql            )
511                                    .println( "names"               ,names          )
512                                    .println( "from"                ,from           )
513                                    .println( "where"               ,where          )
514                                    .println( "exist"               ,exist          )
515                                    .println( "CMD_ENTRY"   ,CMD_ENTRY      )
516                                    .println( "Other..."    ,getAttributes().getAttribute() )
517                                    .fixForm().toString() ;
518            }
519    }