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.hayabusa.db.DBColumn;
022    import org.opengion.hayabusa.io.TableReader;
023    import org.opengion.fukurou.util.ErrorMessage;
024    import org.opengion.fukurou.util.FileUtil;
025    import org.opengion.fukurou.util.Closer ;
026    import org.opengion.fukurou.util.StringUtil ;
027    import static org.opengion.fukurou.util.StringUtil.nval ;
028    
029    import java.io.File;
030    import java.io.BufferedReader;
031    import java.util.Locale ;
032    import java.io.ObjectOutputStream;
033    import java.io.ObjectInputStream;
034    import java.io.IOException;
035    
036    /**
037     * æŒ?®šã?ファイルã‚?DBTableModelオブジェクトに読み取るファイル入力タグですã?
038     *
039     * ãƒ??タ(DBTableModel)と、コントローラ(ReadTableタグ)を与えて、外部からコントロールすることでã€?
040     * å�?¨®形式で ãƒ??タ(DBTableModel)を表示させることã�?できますã?
041     * ReadTableタグ に対して、コマンドを与えることにより、å?部のコントローラの実è£?�«対応しã�?
042     * 形式でãƒ??タを作æ?しますã?
043     * すべての読取ã?初期クラス名を リソースファイルの TABLE_READER_DEFAULT_CLASS でæŒ?®š可能ですã?
044     * そã?場合ã?AutoReader を指定すると、Excel と Default(ãƒ?‚­スãƒ? をé?番に試しますã?
045     *
046     * 入力件数ã‚?DB.COUNT" キーでリクエストにセãƒ?ƒˆしてã�?�¾すã?
047     *
048     * @og.formSample
049     * ●形式ï¼?
050     *     <og:readTable
051     *         command      = "NEW"
052     *         fileURL      = "{@USER.ID}"     読み取りå…?ƒ‡ィレクトリå�?
053     *         filename     = "{@filename}"    読み取りå…?ƒ•ァイルå�?
054     *         encode       = "UnicodeLittle"       読み取りå…?ƒ•ァイルエンコード名
055     *         maxRowCount  = "10000"               読取最大件数(0:[無制限])
056     *     />
057     * ●body?šなã�?
058     *
059     * ●Tag定義??
060     *   <og:readTable
061     *       readerClass        【TAG】実際に読み出すクラス名ã?略称(TableReader_**** の ****)をセãƒ?ƒˆしまã�?{@og.doc03Link readerClass 初期値:Default})
062     *       fileURL            【TAG】読み取りå…?ƒ‡ィレクトリ名をæŒ?®šしまã�?初期値:FILE_URL)
063     *       filename           【TAG】ファイルを作æ?するときã?ファイル名をセãƒ?ƒˆしまã�?(初期値:FILE_FILENAME[=file.xls])
064     *       encode             【TAG】ファイルを作æ?するときã?ファイルエンコーãƒ?‚£ング名をセãƒ?ƒˆしまã�?初期値:FILE_ENCODE)
065     *       maxRowCount        【TAG】読取時のæœ?¤§取り込み件数をセãƒ?ƒˆしまã�?(初期値:DB_MAX_ROW_COUNT[=1000])(0:[無制限])
066     *       separator          【TAG】可変長ファイルを作æ?するときã?é ?›®区åˆ?‚Šæ–?­—をセãƒ?ƒˆしまã�?
067     *       tableId            【TAGã€?通常使ã�?�¾せん)sessionからæ‰?¾—すã‚?DBTableModelオブジェクトã? ID
068     *       command            【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?初期値:NEW)
069     *       modifyType         【TAG】ファイル取り込み時ã? モãƒ?‚£ファイタイãƒ?A(追åŠ?,C(更新),D(削除))を指定しまã�?
070     *       displayMsg         【TAG】query の結果を画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0033[ã€?»¶検索しました])
071     *       notfoundMsg        【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])
072     *       sheetName          【TAG】EXCELファイルを読み込ã‚?�¨きã?シート名を設定しまã�?初期値:æŒ?®šなã�?
073     *       sheetNos           【TAG】EXCELファイルを読み込ã‚?�¨きã?シート番号をè¤?•°設定できまã�?初期値:0)
074     *       sheetConstKeys     【TAG】EXCELファイルを読み込ã‚?�¨きã?固定å?となるカラãƒ?��(CSV形å¼?
075     *       sheetConstAdrs     【TAG】EXCELファイルを読み込ã‚?�¨きã?固定å?となるアドレス(è¡?åˆ?è¡?åˆ?・・・)
076     *       nullBreakClm       【TAG】カラãƒ??に NULL が現れた時点で読み取りを中止しまã�?è¤?•°Sheetの場合ã?、次のSheetを読みまã�?ã€?
077     *       columns            【TAG】読み取りå…?ƒ•ァイルのカラãƒ??をã?外部(タグ)よりæŒ?®šしまã�?
078     *       useNumber          【TAG】行番号æƒ??をã?使用してã�?‚‹/してã�?�ªい[true/false]を指定しまã�?初期値:true)
079     *       adjustColumns      【TAG】読み取りå…?ƒ•ァイルのãƒ??タ変換を行うカラãƒ??をカンマ指定しまã�?
080     *       checkColumns       【TAG】読み取りå…?ƒ•ァイルの整合æ?チェãƒ?‚¯を行うカラãƒ??をカンマ指定しまã�?
081     *       nullCheck          【TAG】NULL チェãƒ?‚¯すべきカラãƒ??をカンマ区åˆ?‚Š(CVS形å¼?でæŒ?®šしまã�?
082     *       language           【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
083     *       stopZero           【TAG】読込件数が0件のときå?ç�?‚’続行するかどã�?�‹[true/false]を指定しまã�?初期値:false[続行する])
084     *       scope              【TAG】キャãƒ?‚·ュする場合ã?スコープ[request/page/session/applicaton]を指定しまã�?初期値:session)
085     *       mainTrans          【TAGã€?通常使ã�?�¾せん)タグで処ç�?�•れる処ç�?�Œメインとなるトランザクション処ç�?�‹どã�?�‹を指定しまã�?初期値:false)
086     *       skipRowCount       【TAGã€?通常は使ã�?�¾せん)ãƒ??タの読み飛ã?し件数を設定しまã�?
087     *       useRenderer        【TAG】読取å?ç�?�§ラベルをコードリソースにé€?¤‰換を行うかどã�?�‹を指定しまã�?(初期値:USE_TABLE_READER_RENDERER[=false])
088     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
089     *   />
090     *
091     * ●使用ä¾?
092     *
093     *     <og:readTable
094     *         command        = "NEW"
095     *         readerClass    = "Fixed"               固定長ãƒ??タの読み取り
096     *         modifyType     = "{@modifyType}"  読取時のモãƒ?‚£ファイタイãƒ?A,Cç­?
097     *         fileURL        = "{@USER.ID}"     読み取りå…?ƒ‡ィレクトリå�?
098     *         filename       = "{@filename}"    読み取りå…?ƒ•ァイルå�?
099     *         encode         = "Shift_JIS"           読み取りå…?ƒ•ァイルエンコード名
100     *         maxRowCount    = "10000"               読取最大件数(0:[無制限])
101     *         columns        = "OYA,KO,HJO,SU,DYSTR,DYEND"   #NAME に対応するカラãƒ??
102     *         useNumber      = "false"               行番号の存在しなã�?ƒ‡ータを読み取りますã?
103     *         adjustColumns  = "OYA,KO,HJO,SU"       ãƒ??タ変換するカラãƒ??("*" で全カラãƒ?
104     *         checkColumns   = "OYA,KO,HJO,SU"       整合æ?チェãƒ?‚¯するカラãƒ??("*" で全カラãƒ?
105     *         nullCheck      = "OYA,KO,SU"           NULLチェãƒ?‚¯を実行しまã�?"*" で全カラãƒ?
106     *         stopZero       = "true"                取å¾?件の場合に以降ã?処ç�?‚’停止しまã�?
107     *         skipRowCount   = "4"                   ãƒ??タの読み飛ã?し件数(読み込み開始ã?、この数字+1行目から)
108     *     />
109     *
110     * @og.group ファイル入åŠ?
111     *
112     * @version  4.0
113     * @author   Kazuhiko Hasegawa
114     * @since    JDK5.0,
115     */
116    public class ReadTableTag extends CommonTagSupport {
117            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
118            private static final String VERSION = "5.7.1.2 (2013/12/20)" ;
119    
120            private static final long serialVersionUID = 571220131220L ;
121    
122            private static final int ERROR_ROW_COUNT = 200 ;        // 4.0.0 (2007/05/25)
123    
124            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 新規作æ? {@value} */
125            public static final String CMD_NEW   = "NEW" ;
126            /** command 引数に渡す事ã?出来ã‚?コマンãƒ? 再検索 {@value} */
127            public static final String CMD_RENEW = "RENEW" ;
128    
129            private static final String[] COMMAND_LIST = new String[] { CMD_NEW , CMD_RENEW };
130    
131            private String  separator               = TableReader.TAB_SEPARATOR;     // é ?›®区åˆ?‚Šæ–?­?
132            private String  fileURL                 = HybsSystem.sys( "FILE_URL" );
133            private String  filename                = HybsSystem.sys( "FILE_FILENAME"               );       // ファイルå�?
134            private String  encode                  = HybsSystem.sys( "FILE_ENCODE"                 );       // ファイルエンコーãƒ?‚£ング  "JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
135            private String  readerClass     = HybsSystem.sys( "TABLE_READER_DEFAULT_CLASS" );               // 3.8.5.3 (2006/08/07)
136            private int             maxRowCount             = -1;
137    //      private String  displayMsg              = "MSG0033";    // ã€?»¶検索しましたã€?
138            private String  displayMsg              = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
139            private String  notfoundMsg             = "MSG0077";    // 対象ãƒ??タはありませんでしたã€?
140            private int     executeCount    = -1;                   // 検索/実行件数
141            private String  modifyType              = null;
142    //      private String[] checkColumns   = null;         // 3.6.0.2 (2004/10/04) 取り込み時チェãƒ?‚¯
143    //      private String[] adjustColumns  = null;         // 3.6.0.2 (2004/10/04) 取り込み時チェãƒ?‚¯
144    //      private String[] nullCheck              = null;         // 3.8.0.2 (2005/06/30) nullチェãƒ?‚¯確èª?
145            private String adjustColumns    = null;         // 3.6.0.2 (2004/10/04) 取り込み時チェãƒ?‚¯
146            private String checkColumns             = null;         // 3.6.0.2 (2004/10/04) 取り込み時チェãƒ?‚¯
147            private String nullCheck                = null;         // 3.8.0.2 (2005/06/30) nullチェãƒ?‚¯確èª?
148    //      private boolean allColumnCheck  = false;        // 3.6.0.2 (2004/10/04) 取り込み時チェãƒ?‚¯
149    
150            private transient DBTableModel table      = null;
151            private String          command         = CMD_NEW;
152            private String          tableId         = HybsSystem.TBL_MDL_KEY ;
153            private String          sheetName       = null ;                // 3.5.4.2 (2003/12/15)
154            private String          sheetNos        = null ;                // 5.5.7.2 (2012/10/09) è¤?•°シートをæŒ?®šできるようにシート番号を指定できるようにするã€?
155            private String          sheetConstKeys  = null ;        // 5.5.8.2 (2012/11/09) 固定å?となるカラãƒ?��(CSV形å¼?
156            private String          sheetConstAdrs  = null ;        // 5.5.8.2 (2012/11/09) 固定å?となるアドレス(è¡?åˆ?è¡?åˆ?・・・)
157            private String          nullBreakClm    = null;         // 5.5.8.2 (2012/11/09) 取込み条件/Sheet BREAK条件
158    
159            // 3.5.4.5 (2004/01/23) 外部よりカラãƒ??(カンマ区åˆ?‚Š)を指定できるようにするã€?
160            private String          columns         = null;
161            private boolean         useNumber       = true;                 // 3.7.0.5 (2005/04/11)
162    
163            private boolean         stopZero        = false;                // 4.3.7.0 (2009/06/01) stopZero属æ?追åŠ?
164    
165            // 5.1.8.0 (2010/07/01) AutoReaderのCalc対å¿?
166    //      private static final String[] AUTO_READER_CLASS  = new String[] { "Excel","Default"      ,"Default"     };
167    //      private static final String[] AUTO_READER_ENCODE = new String[] { null   ,"UnicodeLittle","Windows-31J" };
168            private static final String[] AUTO_READER_CLASS  = new String[] { "Excel","Calc","Default"      ,"Default"     };
169            private static final String[] AUTO_READER_ENCODE = new String[] { null   ,null  ,"UnicodeLittle","Windows-31J" };
170    
171            private boolean isMainTrans             = true;                 // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
172            private int             skipRowCount    = 0;                    // 5.1.6.0 (2010/05/01) ãƒ??タの読み飛ã?し設å®?
173    
174            // 5.2.1.0 (2010/10/01) 読取å?ç�?�§コードリソースのラベル変換を行うかどã�?�‹
175            private boolean useRenderer             = HybsSystem.sysBool( "USE_TABLE_READER_RENDERER" );    // 5.2.1.0 (2010/10/01)
176    
177            /**
178             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
179             *
180             * @og.rev 3.0.1.4 (2003/03/17) displayMsg ã�??�Byteの場合ã?、件数も表示しなã�?‚ˆã�?�«変更ã€?
181             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
182             * @og.rev 3.5.4.1 (2003/12/01) 引数の BufferedReader をã?InputStream に変更ã€?
183             * @og.rev 3.5.4.3 (2004/01/05) 引数の InputStream をã? BufferedReader に戻すã?
184             * @og.rev 3.5.6.5 (2004/08/09) 暫定的に、DBTableModelをå?行削除しますã?
185             * @og.rev 3.6.0.0 (2004/09/24) DBTableModel の先行削除は、scope="session" の場合ã?みã€?
186             * @og.rev 3.6.0.2 (2004/10/04) 取り込み時チェãƒ?‚¯用に、checkColumns,adjustColumns 属æ?追åŠ?
187             * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェãƒ?‚¯を行いますã?
188             * @og.rev 3.8.5.3 (2006/08/07) readerClassã�?"Excel"でエラーが発生したときã?もうä¸?º¦Defaultで再読取を行いますã?
189             * @og.rev 4.0.0.0 (2007/10/12) checkTableColumn 前に、modifyType 設定を行いますã?
190             * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ージリソース統å�? getResource().getMessage â‡?getResource().getLabel )
191             * @og.rev 4.3.1.1 (2008/10/08) columnsが指定されてã�?‚‹場合ã?、AutoReader禁止
192             * @og.rev 4.3.7.0 (2009/06/01) stopZero機è?,DB.COUNTリクエストキーへ読込件数セãƒ?ƒˆを追åŠ?
193             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??、DBTableModelが新規作æ?されたå?ç�?�§のみ行うã€?
194             * @og.rev 5.1.8.0 (2010/07/01) AutoReaderのCalc対å¿?
195             * @og.rev 5.1.9.0 (2010/08/01) AutoReaderでのExceptionの判定をThrowableに変更
196             * @og.rev 5.7.1.2 (2013/12/20) tempMsg.toString() â‡?errMsg 変更
197             *
198             * @return      後続å?ç�??æŒ?¤º
199             */
200            @Override
201            public int doEndTag() {
202                    debugPrint();           // 4.0.0 (2005/02/28)
203                    if( check( command, COMMAND_LIST ) ) {
204                            useMainTrans( isMainTrans );                    // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
205                            startQueryTransaction( tableId );               // 3.6.0.8 (2004/11/19)
206    
207                            // 3.5.6.5 (2004/08/09) 削除するのは、セãƒ?‚·ョンのオブジェクトでよいã€?
208                            // 3.6.0.0 (2004/09/24) 削除するのは、scope="session" の場合ã?みã€?
209                            if( "session".equals( getScope() ) ) {
210                                    removeSessionAttribute( tableId );
211                                    removeSessionAttribute( HybsSystem.VIEWFORM_KEY );
212                            }
213    
214                            if( maxRowCount < 0 ) {
215                                    maxRowCount     = sysInt( "DB_MAX_ROW_COUNT" );
216                            }
217    
218                            // ファイル の読み込み?šAutoReader 処ç�?
219                            BufferedReader pw = null;
220                            final String[] READER_CLASS  ;
221                            final String[] READER_ENCODE ;
222                            if( "AutoReader".equalsIgnoreCase( readerClass ) ) {
223                                    // 4.3.1.1 (2008/10/08)
224                                    if( columns != null && columns.length() > 0 ) {
225                                            String errMsg = "columnsが指定されてã�?‚‹場合ã?、readerClass=\"AutoReader\"は使えません";
226                                            throw new HybsSystemException( errMsg ); // 4.3.4.4 (2009/01/01)
227                                    }
228                                    READER_CLASS  = AUTO_READER_CLASS ;
229                                    READER_ENCODE = AUTO_READER_ENCODE;
230                            }
231                            else {
232                                    READER_CLASS  = new String[] { readerClass };
233                                    READER_ENCODE = new String[] { encode };
234                            }
235    
236                            StringBuilder tempMsg = new StringBuilder();
237                            for( int i=0; i<READER_CLASS.length; i++ ) {
238                                    readerClass = READER_CLASS[i];
239                                    encode      = READER_ENCODE[i];
240    
241                                    try {
242                                            // 5.1.8.0 (2010/07/01) AutoReaderのCalc対å¿?
243    //                                      if( "Excel".equalsIgnoreCase( readerClass ) ) {
244                                            if( "Excel".equalsIgnoreCase( readerClass ) || "Calc".equalsIgnoreCase( readerClass ) ) {
245                                                    create( null );
246                                            }
247                                            else {
248                                                    pw = getBufferedReader();
249                                                    create( pw );
250                                            }
251                                            // 成功すれば、エラーメãƒ?‚»ージをクリアして、その場で抜けるã?
252                                            tempMsg = null;
253                                            break;
254                                    }
255                                    // 3.8.5.3 (2006/08/07) readerClassã�?"Excel"でエラーが発生したときã?もうä¸?º¦Defaultで再読取を行いますã?
256                                    // 5.1.9.0 (2010/08/01) RuntimeException系のExceptionがキャãƒ?ƒ�できなã�?�Ÿめã?Throwableで受けã‚?
257    //                              catch( HybsSystemException ex ) {                               catch( HybsSystemException ex ) {
258                                    catch( Throwable th ) {
259                                            tempMsg.append( "readerClass=["  ).append( readerClass )
260                                                            .append( "],encode=["    ).append( encode )
261                                                            .append( "] Error!"      ).append( HybsSystem.CR )
262                                                            .append( th.getMessage() ).append( HybsSystem.CR ) ;
263    
264    //                                      String tmp = "readerClass=[" + readerClass + "],encode=[" + encode + "] Error!"
265    //                                                              + HybsSystem.CR
266    //                                                              + ex.getMessage()
267    //                                                              + HybsSystem.CR ;
268    //                                      System.err.print( tmp );
269    //                                      tempMsg += tmp ;
270                                    }
271                                    finally {
272                                            Closer.ioClose( pw );           // 4.0.0 (2006/01/31) close 処ç�?™‚の IOException を無è¦?
273                                    }
274                            }
275    
276                            if( tempMsg != null ) { // æœ?¾Œまでエラーがあれã?、例外å?ç�?‚’発行しますã?
277    //                              System.err.print( tempMsg.toString() );
278    //                              throw new HybsSystemException( tempMsg.toString() );
279                                    String errMsg = tempMsg.toString();
280                                    System.err.print( errMsg );
281                                    throw new HybsSystemException( errMsg );                // 5.7.1.2 (2013/12/20) msg â‡?errMsg 変更
282                            }
283    
284                            if( table != null ) {
285                                    // 3.6.0.2 (2004/10/04)
286    //                              table = setAdjustTable( table );
287    
288                                    // 4.0.0.0 (2007/10/12) checkTableColumn 前に、modifyType 設定を行いますã?
289                                    executeCount = table.getRowCount();
290                                    if( modifyType != null ) {
291                                            for( int row=0; row<executeCount; row++ ) {
292                                                    table.setModifyType( row,modifyType );
293                                            }
294                                    }
295    
296                                    ErrorMessage errMsg = checkTableColumn( table );
297                                    if( errMsg != null && ! errMsg.isOK()) {
298                                            jspPrint( TaglibUtil.makeHTMLErrorTable( errMsg,getResource() ) );
299                                            return SKIP_PAGE ;
300                                    }
301    
302                            }
303                            // 3.6.0.8 (2004/11/19) トランザクションチェãƒ?‚¯を行いますã?
304                            if( ! commitTableObject( tableId, table ) ) {
305                                    jspPrint( "ReadTableTag Query処ç�?�Œ割り込まれましたã€?BTableModel は登録しませんã€? );
306                                    return (SKIP_PAGE);
307                            }
308    
309                            StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
310    
311                            // 実行件数の表示 command="NEW" のときã?み、displayMsg を表示させますã?
312                            // 4.0.0 (2005/11/30) 出力é?の変更。ä¸?•ªæœ??に出力しますã?
313    //                      boolean useStatusBar = HybsSystem.sysBool( "VIEW_USE_DISPLAY_MSG" );
314                            if( CMD_NEW.equals( command ) ) {
315    //                              if( useStatusBar && executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
316                                    if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
317                                            buf.append( executeCount );
318    //                                      buf.append( getResource().getMessage( displayMsg ) );
319                                            buf.append( getResource().getLabel( displayMsg ) );
320                                            buf.append( HybsSystem.BR );
321                                    }
322                                    else if( executeCount == 0 && notfoundMsg != null && notfoundMsg.length() > 0 ) {
323    //                                      buf.append( getResource().getMessage( notfoundMsg ) );
324                                            buf.append( getResource().getLabel( notfoundMsg ) );
325                                            buf.append( HybsSystem.BR );
326                                    }
327                            }
328    
329                            // 4.3.7.0 (2009/06/01) 読込件数をã?"DB.COUNT" キーでリクエストにセãƒ?ƒˆするã€?
330                            setRequestAttribute( "DB.COUNT"   , String.valueOf( executeCount ) );
331    
332                            jspPrint( buf.toString() );
333                    }
334    
335                    // 4.3.7.0 (2009/06/01) stopZero機è?を追åŠ?
336                    final int rtnCode ;
337                    if( executeCount == 0 && stopZero )     {
338                            rtnCode = SKIP_PAGE;
339                    }
340                    else {
341                            rtnCode = EVAL_PAGE;
342                    }
343    
344                    // return(EVAL_PAGE);
345                    return ( rtnCode );
346            }
347    
348            /**
349             * タグリブオブジェクトをリリースしますã?
350             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
351             *
352             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
353             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
354             * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得するã?
355             * @og.rev 3.1.4.0 (2003/04/18) command 属æ?に、å?期å?(NEW)を設定するã?
356             * @og.rev 3.5.4.2 (2003/12/15) EXCELのシート名を指定できるように変更ã€?
357             * @og.rev 3.5.4.5 (2004/01/23) 外部よりカラãƒ??(カンマ区åˆ?‚Š)を指定できるようにするã€?
358             * @og.rev 3.6.0.2 (2004/10/04) checkColumns,adjustColumns,allColumnCheck 属æ?追åŠ?
359             * @og.rev 3.7.0.5 (2005/04/11) useNumber 属æ?を追åŠ?�—ますã?
360             * @og.rev 3.8.0.2 (2005/06/30) nullCheck 属æ?追åŠ?
361             * @og.rev 3.8.5.3 (2006/08/07) readerClass 属æ?の初期値をシスãƒ?ƒ リソースより取得しますã?
362             * @og.rev 4.3.7.0 (2009/06/01) stopZero属æ?追åŠ?
363             * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??、DBTableModelが新規作æ?されたå?ç�?�§のみ行うã€?
364             * @og.rev 5.1.6.0 (2010/05/01) ãƒ??タの読み飛ã?し設å®?skipRowCount 属æ?追åŠ?
365             * @og.rev 5.2.1.0 (2010/10/01) 読取å?ç�?�§コードリソースのラベル変換を行うかどã�?�‹ useRenderer 属æ?追åŠ?
366             * @og.rev 5.5.7.2 (2012/10/09) è¤?•°シートをæŒ?®šできるようにシート番号を指定できるように、sheetNos属æ?追åŠ?
367             * @og.rev 5.5.8.2 (2012/11/09) 固定å?となるカラãƒ?��、アドレスのæŒ?®šã?ための、sheetConstKeys、sheetConstAdrs属æ?追åŠ?
368             * @og.rev 5.5.8.2 (2012/11/09) カラãƒ??に NULL が現れた時点で読み取りを中止する、nullBreakClm属æ?追åŠ?
369             */
370            @Override
371            protected void release2() {
372                    super.release2();
373                    separator               = TableReader.TAB_SEPARATOR;   // é ?›®区åˆ?‚Šæ–?­?
374                    fileURL                 = HybsSystem.sys( "FILE_URL" );
375                    filename                = HybsSystem.sys( "FILE_FILENAME" );   // ファイルå�?
376                    encode                  = HybsSystem.sys( "FILE_ENCODE"   );   // ファイルエンコーãƒ?‚£ング  "JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
377                    readerClass             = HybsSystem.sys( "TABLE_READER_DEFAULT_CLASS" );               // 3.8.5.3 (2006/08/07)
378                    maxRowCount             = -1;
379    //              displayMsg              = "MSG0033";    // ã€?»¶検索しましたã€?
380                    displayMsg              = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
381                    notfoundMsg             = "MSG0077";    // 対象ãƒ??タはありませんでしたã€?
382                    executeCount    = -1;                   // 検索/実行件数
383                    modifyType              = null;
384                    command                 = CMD_NEW;
385                    table                   = null;
386                    tableId                 = HybsSystem.TBL_MDL_KEY ;
387                    sheetName               = null;         // 3.5.4.2 (2003/12/15)
388                    sheetNos                = null ;        // 5.5.7.2 (2012/10/09) è¤?•°シートをæŒ?®šできるようにシート番号を指定できるようにするã€?
389                    sheetConstKeys  = null ;        // 5.5.8.2 (2012/11/09) 固定å?となるカラãƒ?��(CSV形å¼?
390                    sheetConstAdrs  = null ;        // 5.5.8.2 (2012/11/09) 固定å?となるアドレス(è¡?åˆ?è¡?åˆ?・・・)
391                    nullBreakClm    = null;         // 5.5.8.2 (2012/11/09) 取込み条件/Sheet BREAK条件
392                    columns                 = null;         // 3.5.4.5 (2004/01/23)
393                    useNumber               = true;         // 3.7.0.5 (2005/04/11)
394                    adjustColumns   = null;         // 3.6.0.2 (2004/10/04) 取り込み時チェãƒ?‚¯
395                    checkColumns    = null;         // 3.6.0.2 (2004/10/04) 取り込み時チェãƒ?‚¯
396                    nullCheck               = null;         // 3.8.0.2 (2005/06/30)
397    //              allColumnCheck  = false;        // 3.6.0.2 (2004/10/04) 取り込み時チェãƒ?‚¯
398                    stopZero                = false;        // 4.3.7.0 (2009/06/01) soptZero追åŠ?
399                    isMainTrans             = true;         // 5.1.6.0 (2010/05/01) DBLastSqlの処ç�??見直ã�?
400                    skipRowCount    = 0;            // 5.1.6.0 (2010/05/01) ãƒ??タの読み飛ã?し設å®?
401                    useRenderer             = HybsSystem.sysBool( "USE_TABLE_READER_RENDERER" );    // 5.2.1.0 (2010/10/01)
402            }
403    
404            /**
405             * TableReader の実オブジェクトを生æ?して?ŒBufferedReader に書き込みますã?
406             *
407             * @og.rev 3.5.4.1 (2003/12/01) 引数の BufferedReader をã?InputStream に変更ã€?
408             * @og.rev 3.5.4.2 (2003/12/15) TableReader のサブクラス名変更ã€?
409             * @og.rev 3.5.4.2 (2003/12/15) EXCELのシート名を指定できるように変更ã€?
410             * @og.rev 3.5.4.3 (2004/01/05) 引数の InputStream をã? BufferedReader に戻すã?
411             * @og.rev 3.5.4.5 (2004/01/23) TableReader に、encode を渡すよã�?�«変更ã€?
412             * @og.rev 3.5.6.0 (2004/06/18) å�?¨®プラグイン関連付け設定を、シスãƒ?ƒ パラメータ に記述しますã?
413             * @og.rev 3.7.0.5 (2005/04/11) useNumber 属æ?を追åŠ?�—ますã?
414             * @og.rev 4.0.0.0 (2005/01/31) キーのæŒ?®šを、TableReader. から、TableReader_ に変更しますã?
415             * @og.rev 4.0.0.0 (2005/01/31) lang â‡?ResourceManager へ変更
416             * @og.rev 5.1.6.0 (2010/05/01) ãƒ??タの読み飛ã?し設å®?skipRowCount 属æ?追åŠ?
417             * @og.rev 5.2.1.0 (2010/10/01) 読取å?ç�?�§コードリソースのラベル変換を行うかどã�?�‹設å®?useRenderer 属æ?追åŠ?
418             * @og.rev 5.5.7.2 (2012/10/09) è¤?•°シートをæŒ?®šできるようにシート番号を指定できるように、sheetNos属æ?追åŠ?
419             * @og.rev 5.5.8.2 (2012/11/09) 固定å?となるカラãƒ?��、アドレスのæŒ?®šã?ための、sheetConstKeys、sheetConstAdrs属æ?追åŠ?
420             * @og.rev 5.5.8.2 (2012/11/09) カラãƒ??に NULL が現れた時点で読み取りを中止する、nullBreakClm属æ?追åŠ?
421             *
422             * @param       out     出力するBufferedReaderオブジェクãƒ?
423             */
424            protected void create( final BufferedReader out )  {
425    
426                    String className = HybsSystem.sys( "TableReader_" + readerClass ) ;             // 4.0.0 (2005/01/31)
427                    TableReader reader = (TableReader)HybsSystem.newInstance( className );  // 3.5.5.3 (2004/04/09)
428    
429                    reader.setResourceManager( getResource() );     // 4.0.0 (2005/01/31)
430                    reader.setSeparator( separator );
431                    reader.setEncode( encode );                                             // 3.5.4.5 (2004/01/23)
432                    reader.setColumns( columns );                                   // 3.5.4.5 (2004/01/23)
433                    reader.setUseNumber( useNumber );                               // 3.7.0.5 (2005/04/11)
434                    reader.setMaxRowCount( maxRowCount );
435                    reader.setSkipRowCount( skipRowCount );                 // 5.1.6.0 (2010/05/01)
436                    reader.setUseRenderer( useRenderer );                   // 5.2.1.0 (2010/10/01)
437                    reader.setDebug( isDebug() );                                   // 5.5.7.2 (2012/10/09) ãƒ?ƒ�ãƒ?‚°æƒ??をå?力するかどã�?�‹を指å®?
438                    if( reader.isExcel() ) {                                                // 3.5.4.3 (2004/01/05)
439                            reader.setFilename( HybsSystem.url2dir( StringUtil.urlAppend( fileURL,filename )));
440                            reader.setSheetName( sheetName );                       // 3.5.4.2 (2003/12/15)
441                            reader.setSheetNos( sheetNos );                         // 5.5.7.2 (2012/10/09) è¤?•°シートをæŒ?®šできるようにシート番号を指定できるようにするã€?
442                            reader.setSheetConstData( sheetConstKeys,sheetConstAdrs ) ;             // 5.5.8.2 (2012/11/09) 固定å?となるカラãƒ?��、アドレスのæŒ?®?
443                            reader.setNullBreakClm( nullBreakClm ) ;        // 5.5.8.2 (2012/11/09) 取込み条件/Sheet BREAK条件
444                            reader.readDBTable();
445                    }
446                    else {
447                            reader.readDBTable( out );
448                    }
449                    table = reader.getDBTableModel();
450            }
451    
452            /**
453             * BufferedReader を取得しますã?
454             *
455             * ここでは、ä¸?ˆ¬çš?�ªファイル出力をè€??した BufferedReader を作æ?しますã?
456             *
457             * @og.rev 2.2.0.0 (2002/12/17) 中国èª?国際化)対å¿?エンコードã?取得方法変更
458             * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得するã?
459             * @og.rev 3.5.4.1 (2003/12/01) 引数の BufferedReader をã?InputStream に変更ã€?
460             * @og.rev 3.5.4.3 (2004/01/05) 引数の InputStream をã? BufferedReader に戻すã?
461             * @og.rev 3.5.5.9 (2004/06/07) FileUtil.getBufferedReader を使用
462             *
463             * @return      ファイル読取BufferedReaderオブジェクãƒ?
464             */
465            private BufferedReader getBufferedReader() {
466                    if( filename == null ) {
467                            String errMsg = "ファイル名がセãƒ?ƒˆされてã�?�¾せんã€?;
468                            throw new HybsSystemException( errMsg );
469                    }
470                    String directory = HybsSystem.url2dir( fileURL );
471                    File file = new File( StringUtil.urlAppend( directory,filename ) );
472    
473                    BufferedReader out = FileUtil.getBufferedReader( file,encode );
474    
475                    return out ;
476            }
477    
478            /**
479             * adjustColumns にæŒ?®šされたカラãƒ?‚’再登録しますã?
480             * カラãƒ?‚ªブジェクトã?DBType属æ?に対応した変換を行い、å?設定しますã?
481             *
482             * @og.rev 3.6.0.2 (2004/10/04) 新規作æ?
483             *
484             * @param   table DBTableModel 登録前ã?DBTableModel
485             *
486             * @return  DBTableModel 登録後ã?DBTableModel
487             */
488    //      private DBTableModel setAdjustTable( final DBTableModel table ) {
489    //              if( adjustColumns != null && adjustColumns.length > 0 ) {
490    //                      int rowCnt = table.getRowCount();
491    //                      int[] clmNo = new int[adjustColumns.length];
492    //                      for( int i=0; i<clmNo.length; i++ ) {
493    //                              clmNo[i] = table.getColumnNo( adjustColumns[i] );
494    //                      }
495    //
496    //                      for( int row=0; row<rowCnt; row++ ) {
497    //                              String[] vals = table.getValues( row );
498    //                              for( int i=0; i<clmNo.length; i++ ) {
499    //                                      int clm = clmNo[i];
500    //                                      DBColumn dbClm = table.getDBColumn( clm );
501    //                                      vals[clm] = dbClm.valueSet( vals[clm] );
502    //                              }
503    //                              table.setValues( vals,row );
504    //                      }
505    //              }
506    //              return table ;
507    //      }
508    
509            /**
510             * カラãƒ?–‡字å?(CSV形å¼?から、カラãƒ?•ª号配å?を作æ?しますã?
511             * 簡易メソãƒ?ƒ‰ですã?
512             * 引数がã?"*" の場合ã?、å?カラãƒ?‚’æŒ?®šしたことになりますã?
513             * null の場合ã?、サイズã�???の配å?を返しますã?
514             *
515             * @og.rev 4.0.0.0 (2007/05/25) 新規作æ?
516             *
517             * @param       clms    カラãƒ?–‡字å?(CSV形å¼?
518             * @param       table   DBTableModelオブジェクãƒ?
519             *
520             * @return      カラãƒ?•ª号配å?(無ã�??合ã?ã€?•·さ0ã?配å?)
521             */
522            private int[] makeClmNos( final String clms,final DBTableModel table ) {
523                    final int[] clmNo;
524    
525                    if( clms == null ) {
526                            clmNo = new int[0];
527                    }
528                    else if( "*".equals( clms ) ) {
529                            int size = table.getColumnCount();
530                            clmNo = new int[size];
531                            for( int i=0; i<size; i++ ) {
532                                    clmNo[i] = i;
533                            }
534                    }
535                    else {
536                            String[] clmStr = StringUtil.csv2Array( clms );
537                            int size = clmStr.length;
538                            clmNo = new int[size];
539                            for( int i=0; i<size; i++ ) {
540                                    clmNo[i] = table.getColumnNo( clmStr[i] );
541                            }
542                    }
543    
544                    return clmNo;
545            }
546    
547            /**
548             * checkColumns にæŒ?®šされたカラãƒ?‚’チェãƒ?‚¯しますã?
549             * カラãƒ?‚ªブジェクトã?DBType属æ?に対応したチェãƒ?‚¯を行いますã?
550             * チェãƒ?‚¯結果で、エラーが発生したå?合ã?、ErrorMessage オブジェクトを
551             * 返しますã?
552             * DBColumn#valueCheck( String ) の結果のErrorMessageをすべて append
553             * してã�?��ますã?
554             * useAdjust==true で、かつ、エラーがなã�??合ã?、adjustColumns 処ç�?µ�果ã‚?
555             * DBTableModel に反映させますã?
556             * debug=true で、エラー時ã?詳細なãƒ??タをå?力しますã?
557             *
558             * @og.rev 3.6.0.2 (2004/10/04) 新規作æ?
559             * @og.rev 3.8.0.2 (2005/06/30) nullチェãƒ?‚¯確èª?
560             * @og.rev 4.0.0.0 (2007/05/25) 処ç�??序書き換ã�?
561             *
562             * @param       table   DBTableModelオブジェクãƒ?
563             *
564             * @return      カラãƒ?‚­ー ??値 のエラーメãƒ?‚»ージオブジェクãƒ?
565             */
566            private ErrorMessage checkTableColumn( final DBTableModel table ) {
567                    ErrorMessage errMsg = new ErrorMessage( "Check Columns Error!" );
568    
569                    int rowCnt = table.getRowCount();
570                    int[] adjClmNo = makeClmNos( adjustColumns,table );
571                    int[] chkClmNo = makeClmNos( checkColumns,table );
572                    int[] nllclmNo = makeClmNos( nullCheck,table );
573    
574                    boolean useAdjust = (adjClmNo.length > 0) ;
575    
576                    for( int row=0; row<rowCnt; row++ ) {
577                            String[]   vals   = table.getValues( row );
578                            DBColumn[] dbClms = table.getDBColumns();
579                            boolean isError = false;                                                // 5.5.7.2 (2012/10/09) エラー時ã?フラグ。ループでクリアするã€?
580    
581                            // adjustColumns 処ç�?
582                            for( int i=0; i<adjClmNo.length; i++ ) {
583                                    int no = adjClmNo[i];
584                                    vals[no] = dbClms[no].valueSet( vals[no] );
585                            }
586    
587                            // checkColumns 処ç�?
588                            for( int i=0; i<chkClmNo.length; i++ ) {
589                                    int no = chkClmNo[i];
590    //                              errMsg.append( row+1,dbClms[no].valueCheck( vals[no] ) );
591                                    ErrorMessage msg = dbClms[no].valueCheck( vals[no] );
592                                    if( msg.getKekka() > ErrorMessage.OK ) {
593                                            isError = true;
594                                            errMsg.append( row+1,dbClms[no].valueCheck( vals[no] ) );
595                                    }
596                            }
597    
598                            // nullCheck 処ç�?
599                            for( int i=0; i<nllclmNo.length; i++ ) {
600                                    int no = nllclmNo[i];
601                                    if( vals[no] == null || vals[no].length() == 0 ) {
602                                            isError = true;
603                                            String label = dbClms[no].getLabel();
604                                            // ERR0012 : æŒ?®šã?ãƒ??タがセãƒ?ƒˆされてã�?�¾せんã€?NULLエラー)。key={0}
605                                            errMsg.addMessage( row+1,ErrorMessage.NG,"ERR0012",label );
606                                    }
607                            }
608    
609                            // 5.5.7.2 (2012/10/09) エラー時ã?ãƒ?ƒ�ãƒ?‚°出åŠ?
610                            if( isDebug() && isError ) {
611                                    errMsg.addMessage( row+1,ErrorMessage.OK,"Debug Info",java.util.Arrays.toString(table.getValues(row) ) );
612                            }
613    
614                            // adjustColumns 処ç�?µ�果を反æ˜?�•せますã?
615    //                      if( useAdjust && errMsg.isOK() ) { table.setValues( vals,row ); }
616                            if( useAdjust && !isError ) { table.setValues( vals,row ); }
617                            if( errMsg.size() > ERROR_ROW_COUNT ) { break; }
618                    }
619    
620                    return errMsg;
621            }
622    
623    //      private ErrorMessage checkTableColumn( final DBTableModel table ) {
624    //              ErrorMessage errMsg = new ErrorMessage( "Check Columns Error!" );
625    //
626    //              if( allColumnCheck ) {
627    //                      checkColumns = table.getNames();
628    //              }
629    //
630    //              int rowCnt = table.getRowCount();
631    //              if( checkColumns != null && checkColumns.length > 0 ) {
632    //                      int[] clmNo = new int[checkColumns.length];
633    //                      for( int i=0; i<clmNo.length; i++ ) {
634    //                              clmNo[i] = table.getColumnNo( checkColumns[i] );
635    //                      }
636    //
637    //                      for( int row=0; row<rowCnt; row++ ) {
638    //                              String[] vals = table.getValues( row );
639    //                              for( int i=0; i<clmNo.length; i++ ) {
640    //                                      int clm = clmNo[i];
641    //                                      DBColumn dbClm = table.getDBColumn( clm );
642    //                                      errMsg.append( row+1,dbClm.valueCheck( vals[clm] ) );
643    //                              }
644    //                      }
645    //              }
646    //
647    //              // 3.8.0.2 (2005/06/30) nullチェãƒ?‚¯確èª?
648    //              if( nullCheck != null && nullCheck.length > 0 ) {
649    //                      int[] clmNo = new int[nullCheck.length];
650    //                      for( int i=0; i<clmNo.length; i++ ) {
651    //                              clmNo[i] = table.getColumnNo( nullCheck[i] );
652    //                      }
653    //
654    //                      for( int row=0; row<rowCnt; row++ ) {
655    //                              String[] vals = table.getValues( row );
656    //                              for( int i=0; i<clmNo.length; i++ ) {
657    //                                      int clm = clmNo[i];
658    //                                      if( vals[clm] == null || vals[clm].length() == 0 ) {
659    //                                              String label = getResource().getLabel( nullCheck[i] );
660    //                                              // ERR0012 : æŒ?®šã?ãƒ??タがセãƒ?ƒˆされてã�?�¾せんã€?NULLエラー)。key={0}
661    //                                              errMsg.addMessage( row+1,ErrorMessage.NG,"ERR0012",label );
662    //                                      }
663    //                              }
664    //                      }
665    //              }
666    //
667    //              return errMsg;
668    //      }
669    
670            /**
671             * 【TAGã€?通常は使ã�?�¾せん)結果のDBTableModelをã?sessionに登録するときã?キーを指定しまã�?
672             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
673             *
674             * @og.tag
675             * 検索結果より、DBTableModelオブジェクトを作æ?しますã?これをã?下流ã?viewタグ等に
676             * 渡すå?合にã€??常は、session を利用しますã?そã?場合ã?登録キーですã?
677             * query タグを同時に実行して、結果を求めるå?合ã?同ä¸?ƒ¡モリに配置される為ã€?
678             * こã? tableId 属æ?を利用して、メモリ空間をåˆ?�‘ますã?
679             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])ã€?
680             *
681             * @param       id sessionに登録する時ã? ID
682             */
683            public void setTableId( final String id ) {
684                    tableId = nval( getRequestParameter( id ), tableId );
685            }
686    
687            /**
688             * 【TAG】可変長ファイルを作æ?するときã?é ?›®区åˆ?‚Šæ–?­—をセãƒ?ƒˆしますã?
689             *
690             * @og.tag 可変長ファイルを作æ?するときã?é ?›®区åˆ?‚Šæ–?­—をセãƒ?ƒˆしますã?
691             *
692             * @param   separator é ?›®区åˆ?‚Šæ–?­?
693             */
694            public void setSeparator( final String separator ) {
695                    this.separator = nval( getRequestParameter( separator ),this.separator );
696            }
697    
698            /**
699             * 【TAG】読み取りå…?ƒ‡ィレクトリ名をæŒ?®šしまã�?
700             *              (初期値:FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
701             *
702             * @og.tag
703             * こã?属æ?でæŒ?®šされるãƒ?‚£レクトリより、ファイルを読み取りますã?
704             * æŒ?®š方法ã?ã€??常の fileURL 属æ?と同様に、å?頭がã?'/' (UNIX) またã?ã€?¼’文字目がã?
705             * ":" (Windows)の場合ã?、指定ã?URLそã?ままのãƒ?‚£レクトリに、そã�?�§なã�??合ã?ã€?
706             * fileURL = "{&#064;USER.ID}" とæŒ?®šすると、FILE_URL 属æ?でæŒ?®šã?フォルãƒ??下にã€?
707             * さらに、各個人ID別のフォルãƒ?‚’作æ?して、そこを操作しますã?
708             * (初期値:シスãƒ?ƒ 定数のFILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
709             *
710             * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソãƒ?ƒ‰の利用
711             * @og.rev 4.0.0.0 (2007/11/20) æŒ?®šされたãƒ?‚£レクトリ名ã?æœ?¾Œが"\"or"/"で終わってã�?�ªã�??合にã€?/"を付加するã€?
712             *
713             * @param       url 読み取りå…?ƒ‡ィレクトリå�?
714             * @see         org.opengion.hayabusa.common.SystemData#FILE_URL
715             */
716            public void setFileURL( final String url ) {
717                    String furl = nval( getRequestParameter( url ),null );
718                    if( furl != null ) {
719                            char ch = furl.charAt( furl.length()-1 );
720                            if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
721                            fileURL = StringUtil.urlAppend( fileURL,furl );
722                    }
723            }
724    
725            /**
726             * 【TAG】ファイルを作æ?するときã?ファイル名をセãƒ?ƒˆしまã�?
727             *              (初期値:FILE_FILENAME[={@og.value org.opengion.hayabusa.common.SystemData#FILE_FILENAME}])ã€?
728             *
729             * @og.tag ファイルを作æ?するときã?ファイル名をセãƒ?ƒˆしますã?
730             * (初期値:シスãƒ?ƒ 定数のFILE_FILENAME[={@og.value org.opengion.hayabusa.common.SystemData#FILE_FILENAME}])ã€?
731             *
732             * @param   filename ファイルå�?
733             * @see         org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK
734             */
735            public void setFilename( final String filename ) {
736                    this.filename = nval( getRequestParameter( filename ),this.filename );
737            }
738    
739            /**
740             * 【TAG】ファイルを作æ?するときã?ファイルエンコーãƒ?‚£ング名をセãƒ?ƒˆしまã�?
741             *              (初期値:FILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])ã€?
742             *
743             * @og.tag
744             * Shift_JIS,MS932,Windows-31J,UTF-8,ISO-8859-1,UnicodeLittle
745             * (初期値:シスãƒ?ƒ 定数のFILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])ã€?
746             *
747             * @og.rev 2.2.0.0 (2002/12/17) 中国èª?国際化)対å¿?エンコードã?取得方法変更
748             * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得するã?
749             *
750             * @param   enc ファイルエンコーãƒ?‚£ングå�?
751             * @see     <a href="http://www.iana.org/assignments/character-sets">IANA Charset Registry</a>
752             * @see         org.opengion.hayabusa.common.SystemData#FILE_ENCODE
753             */
754            public void setEncode( final String enc ) {
755                    encode = nval( getRequestParameter( enc ),encode );
756            }
757    
758            /**
759             * 【TAG】実際に読み出すクラス名ã?略称(TableReader_**** の ****)をセãƒ?ƒˆしまã�?{@og.doc03Link readerClass 初期値:Default})ã€?
760             *
761             * @og.tag
762             * 実際に読み出すクラスå�?の略称)をセãƒ?ƒˆしますã?
763             * これは、org.opengion.hayabusa.io 以下ã? TableReader_**** クラスの **** ã‚?
764             * 与えますã?これらã?、TableReader インターフェースを継承したサブクラスですã?
765             * 属æ?クラス定義の {@link org.opengion.hayabusa.io.TableReader TableReader} を参照願いますã?
766             * {@og.doc03Link readerClass TableReader_**** クラス}
767             *
768             * @param   readerClass クラスå�?の略称)
769             * @see         org.opengion.hayabusa.io.TableReader  TableReaderのサブクラス
770             */
771            public void setReaderClass( final String readerClass ) {
772                    this.readerClass = nval( getRequestParameter( readerClass ),this.readerClass );
773            }
774    
775            /**
776             * 【TAG】読取時のæœ?¤§取り込み件数をセãƒ?ƒˆしまã�?
777             *              (初期値:DB_MAX_ROW_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#DB_MAX_ROW_COUNT}])ã€?
778             *
779             * @og.tag
780             * DBTableModelのãƒ??タとして登録するæœ?¤§件数をこの値に設定しますã?
781             * サーバã?のメモリè³?º�と応答時間ã?確保ã?為ですã?
782             * 0 をセãƒ?ƒˆすると、無制é™?Integer.MAX_VALUE)になりますã?
783             * (初期値:ユーザー定数のDB_MAX_ROW_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#DB_MAX_ROW_COUNT}])ã€?
784             *
785             * @og.rev 5.5.8.5 (2012/11/27) 0を無制限として処ç�?�—ますã?
786             *
787             * @param   count 読取時のæœ?¤§取り込み件数
788             * @see         org.opengion.hayabusa.common.SystemData#DB_MAX_ROW_COUNT
789             */
790            public void setMaxRowCount( final String count ) {
791                    maxRowCount = nval( getRequestParameter( count ),maxRowCount );
792                    if( maxRowCount == 0 ) { maxRowCount = Integer.MAX_VALUE ; }            // 5.5.8.5 (2012/11/27)
793            }
794    
795            /**
796             * 【TAG】コマンãƒ?NEW,RENEW)をセãƒ?ƒˆしまã�?初期値:NEW)ã€?
797             *
798             * @og.tag
799             * コマンドã?,HTMLから(get/post)æŒ?®šされますã?で,CMD_xxx で設定される
800             * フィールド定数値のã�?�¥れかをã?æŒ?®šできますã?
801             * 何も設定されなã�??またã?、null の場合ã?ã€?NEW" がå?期å?にセãƒ?ƒˆされますã?
802             *
803             * @param       cmd コマンãƒ?public static final 宣è¨?�•れてã�?‚‹æ–?­—å?)
804             * @see         <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ReadTableTag.CMD_NEW">コマンド定数</a>
805             */
806            public void setCommand( final String cmd ) {
807                    String cmd2 = getRequestParameter( cmd );
808                    if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); }
809            }
810    
811            /**
812             * 【TAG】query の結果を画面上に表示するメãƒ?‚»ージIDを指定しまã�?初期値:MSG0033[ã€?»¶検索しました])ã€?
813             *
814             * @og.tag
815             * ここでは、検索結果の件数ã‚?™»録された件数をまずå?力しã€?
816             * そã?次に、ここでæŒ?®šしたメãƒ?‚»ージをリソースから取得して
817             * 表示しますã?
818             * 表示させたくなã�??合ã?, displayMsg = "" をセãƒ?ƒˆしてくださいã€?
819             * 初期値は、検索件数を表示しますã?
820             *
821             * @param   id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
822             */
823            public void setDisplayMsg( final String id ) {
824                    if( id != null ) { displayMsg = id; }
825            }
826    
827            /**
828             * 【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])ã€?
829             *
830             * @og.tag
831             * ここでは、検索結果がゼロ件の場合ã?み、特別なメãƒ?‚»ージを表示させますã?
832             * 従来は、displayMsg と兼用で、ã?0ã€?»¶検索しました』とã�?�†表示でしたがã?
833             * displayMsg の初期表示は、OFF になりましたので、ゼロ件の場合ã?み別に表示させますã?
834             * 表示させたくなã�??合ã?, notfoundMsg = "" をセãƒ?ƒˆしてくださいã€?
835             * 初期値は、MSG0077[対象ãƒ??タはありませんでした]ですã?
836             *
837             * @param       id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
838             */
839            public void setNotfoundMsg( final String id ) {
840                    String ids = getRequestParameter( id );
841                    if( ids != null ) { notfoundMsg = ids; }
842            }
843    
844            /**
845             * 【TAG】ファイル取り込み時ã? モãƒ?‚£ファイタイãƒ?A(追åŠ?,C(更新),D(削除))を指定しますã?
846             *
847             * @og.tag
848             * ファイル読み込み時に、そのãƒ??タをA(追åŠ?、C(更新)、D(削除)の
849             * モãƒ?‚£ファイタイプをつけた状態にしますã?
850             * そã?状態で、そのまま、update する事が可能になりますã?
851             *
852             * @param   type ファイル取り込み時ã? モãƒ?‚£ファイタイãƒ?A,C,D属æ?)
853             */
854            public void setModifyType( final String type ) {
855                    modifyType = getRequestParameter( type );
856            }
857    
858            /**
859             * 【TAG】EXCELファイルを読み込ã‚?�¨きã?シート名を設定しまã�?初期値:æŒ?®šなã�?ã€?
860             *
861             * @og.tag
862             * EXCELファイルを読み込ã‚?™‚に、シート名を指定しますã?これにより、è¤?•°の形式ã?
863             * 異なるデータをé?次読み込ã‚?�“とã‚??シートをæŒ?®šして読み取ることが可能になりますã?
864             * sheetNos と sheetName が同時にæŒ?®šされた場合ã?、sheetNos が優先されますã?エラーにはならなã�??でご注意くã�?�•ã�??
865             * 初期値は、指定なしですã?
866             *
867             * @og.rev 3.5.4.2 (2003/12/15) 新規追åŠ?
868             *
869             * @param   sheet EXCELファイルのシート名
870             * @see         #setSheetNos( String ) 
871             */
872            public void setSheetName( final String sheet ) {
873                    sheetName = nval( getRequestParameter( sheet ),sheetName );
874            }
875    
876            /**
877             * 【TAG】EXCELファイルを読み込ã‚?�¨きã?シート番号を指定しまã�?初期値:0)ã€?
878             *
879             * @og.tag
880             * EXCEL読み込み時にè¤?•°シートをマã?ジして取り込みますã?
881             * シート番号はã€? から始まる数字で表しますã?
882             * ヘッãƒ??は、最初ã?シートã?カラãƒ?½�置に合わせますã??ˆã?ãƒ?ƒ€ータイトルの自動認識ã?ありません。ï¼?
883             * よって、指定するシートã?、すべて同ä¸?ƒ¬イアウトでなã�?�¨取り込み時にカラãƒ??ずれが発生しますã?
884             * 
885             * シート番号のæŒ?®šã?、カンマ区åˆ?‚Šで、è¤?•°æŒ?®šできますã?またã?N-M の様にハイフンで繋げることでã€?
886             * N 番から、M 番のシートç¯?›²をä¸?‹¬æŒ?®š可能ですã?またã?"*" による、å?シート指定が可能ですã?
887             * これらã?çµ?�¿合わせも可能ですã???0,1,3,5-8,10-* ??
888             * ただしã?"*" に関しては例外的に、ä¸?–‡字だけで、すべてのシートを表すか、N-* を最後にæŒ?®šするかの
889             * どちらかですã?途中にはã€?*" は、現れませんã€?
890             * シート番号はã€?‡�è¤?1,1,2,2)ã€??転(3,2,1) でのæŒ?®šが可能ですã?これは、そのæŒ?®šé?で、読み込まれますã?
891             * sheetNos と sheetName が同時にæŒ?®šされた場合ã?、sheetNos が優先されますã?エラーにはならなã�??でご注意くã�?�•ã�??
892             * 
893             * 初期値はã€??ˆ第ä¸?‚·ートï¼?ですã?
894             *
895             * @og.rev 5.5.7.2 (2012/10/09) 新規追åŠ?
896             *
897             * @param   sheet EXCELファイルのシート番号??から始まるï¼?
898             * @see         #setSheetName( String ) 
899             */
900            public void setSheetNos( final String sheet ) {
901                    sheetNos = nval( getRequestParameter( sheet ),sheetNos );
902                    if( sheetNos != null && sheetNos.length() > 0 ) {
903                            boolean errFlag = false;
904                            for( int i=0; i<sheetNos.length(); i++ ) {
905                                    char ch = sheetNos.charAt(i);
906                                    if( ch == '-' || ch == ',' ) { continue; }
907                                    if( ch == '*' && ( i==0 || i==sheetNos.length()-1 ) ) { continue; }
908                                    if( ch < '0' || ch > '9' ) { errFlag = true; break; }
909                            }
910                            if( errFlag ) {
911                                    String errMsg = "sheetNos のæŒ?®šを見直してください。sheetNos=[" + sheetNos + "]";
912                                    throw new HybsSystemException( errMsg );
913                            }
914                    }
915            }
916    
917            /**
918             * 【TAG】EXCELファイルを読み込ã‚?�¨きã?シート単位ã?固定å?を設定するためã?カラãƒ?��を指定しますã?
919             *
920             * @og.tag
921             * カラãƒ?��は、カンマ区åˆ?‚ŠでæŒ?®šしますã?
922             * これにより、シートã?ä¸?�‹æ‰?�«書かれてã�?‚‹æƒ??をã?DBTableModel のカラãƒ?�«固定å?として
923             * 設定することができますã?
924             * 例として、DB定義書で、テーブル名をシートã?全レコードに設定したい場合などに使ã�?�¾すã?
925             * こã?メソãƒ?ƒ‰は、isExcel() == true の場合ã?み利用されますã?
926             *
927             * @og.rev 5.5.8.2 (2012/11/09) 新規追åŠ?
928             *
929             * @param   constKeys 固定å?となるカラãƒ?��(CSV形å¼?
930             * @see         #setSheetConstAdrs( String ) 
931             */
932            public void setSheetConstKeys( final String constKeys ) {
933                    sheetConstKeys = nval( getRequestParameter( constKeys ),null );
934            }
935    
936            /**
937             * 【TAG】EXCELファイルを読み込ã‚?�¨きã?シート単位ã?固定å?を設定するためã?カラãƒ?��に対応するアドレスを指定しますã?
938             *
939             * @og.tag
940             * アドレスは、EXCEL上ã?è¡?列をカンマ区åˆ?‚ŠでæŒ?®šしますã?
941             * 行å?は、EXCELオブジェクトに準拠するためã€?¼�から始まる整数ですã?
942             * これにより、シートã?ä¸?�‹æ‰?�«書かれてã�?‚‹æƒ??をã?DBTableModel のカラãƒ?�«固定å?として
943             * 設定することができますã?
944             * 例として、DB定義書で、テーブル名をシートã?全レコードに設定したい場合などに使ã�?�¾すã?
945             * こã?メソãƒ?ƒ‰は、isExcel() == true の場合ã?み利用されますã?
946             *
947             * @og.rev 5.5.8.2 (2012/11/09) 新規追åŠ?
948             *
949             * @param   constAdrs 固定å?となるアドレス(è¡?åˆ?è¡?åˆ?・・・)
950             * @see         #setSheetConstKeys( String ) 
951             */
952            public void setSheetConstAdrs( final String constAdrs ) {
953                    sheetConstAdrs = nval( getRequestParameter( constAdrs ),null );
954            }
955    
956            /**
957             * 【TAG】ここにæŒ?®šされたカラãƒ??に NULL が現れた時点で読み取りを中止しますã?
958             *
959             * @og.tag
960             * これは、指定ã?カラãƒ??å¿??とã�?�†事を条件に、そのレコードだけを読み取る処ç�?‚’行いますã?
961             * è¤?•°Sheetの場合ã?、次のSheetを読みますã?
962             * 現時点では、Excel の場合ã?み有効ですã?
963             *
964             * @og.rev 5.5.8.2 (2012/11/09) 新規追åŠ?
965             *
966             * @param   clm カラãƒ??
967             */
968            public void setNullBreakClm( final String clm ) {
969                    nullBreakClm = nval( getRequestParameter( clm ),null );
970            }
971    
972            /**
973             * 【TAG】読み取りå…?ƒ•ァイルのカラãƒ??をã?外部(タグ)よりæŒ?®šしますã?
974             *
975             * @og.tag
976             * 読み取りå…?ƒ•ァイルのカラãƒ??をã?外部(タグ)よりæŒ?®šしますã?
977             * ファイルに記述されã�?#NAME より優先して使用されますã?
978             * これは、å?ファイルのカラãƒ?‚’é ?•ªにæŒ?®šã?カラãƒ?��に割り当てる機è?で
979             * ファイルの特定ã?カラãƒ??を抜きå?して取り込ã‚?©Ÿè?ではありませんã€?
980             *
981             * @og.rev 3.5.4.5 (2004/01/23) 新規作æ?
982             *
983             * @param   clms 読み取りå…?ƒ•ァイルのカラãƒ??(カンマ区åˆ?‚Šæ–?­?
984             */
985            public void setColumns( final String clms ) {
986                    columns = nval( getRequestParameter( clms ),columns );
987            }
988    
989            /**
990             * 【TAG】読み取りå…?ƒ•ァイルの整合æ?チェãƒ?‚¯を行うカラãƒ??をカンマ指定しますã?
991             *
992             * @og.tag
993             * カラãƒ?‚ªブジェクトã?DBType属æ?に対応したチェãƒ?‚¯を行いますã?
994             * æŒ?®šã?カラãƒ?��をカンマ区åˆ?‚Š(CSV)でè¤?•°æŒ?®šできますã?
995             * 全てのカラãƒ??チェãƒ?‚¯を行う場合ã?、allColumnCheck = "true" ã‚?
996             * æŒ?®šして下さã�??
997             * åˆ?§£方法ã?ã€??常のパラメータ取得後に、CSVåˆ?§£しますã?
998             *
999             * @og.rev 3.6.0.2 (2004/10/04) 新規追åŠ?取り込み時チェãƒ?‚¯用
1000             * @og.rev 3.8.8.5 (2007/03/09) 通常のパラメータ取得後に、CSVåˆ?§£に戻しますã?
1001             *
1002             * @param   clms 整合æ?チェãƒ?‚¯を行うカラãƒ??(カンマ区åˆ?‚Šæ–?­?
1003             */
1004            public void setCheckColumns( final String clms ) {
1005                    checkColumns = nval( getRequestParameter( clms ),checkColumns );
1006    
1007    //              checkColumns = StringUtil.csv2Array( getRequestParameter( clms ) );
1008    //              if( checkColumns.length == 0 ) { checkColumns = null; }
1009            }
1010    
1011            /**
1012             * 【TAG】読み取りå…?ƒ•ァイルのãƒ??タ変換を行うカラãƒ??をカンマ指定しますã?
1013             *
1014             * @og.tag
1015             * カラãƒ?‚ªブジェクトã?DBType属æ?に対応したデータ変換を行いますã?
1016             * æŒ?®šã?カラãƒ?��をカンマ区åˆ?‚Š(CSV)でè¤?•°æŒ?®šできますã?
1017             * åˆ?§£方法ã?ã€??常のパラメータ取得後に、CSVåˆ?§£しますã?
1018             *
1019             * @og.rev 3.6.0.2 (2004/10/04) 新規追åŠ?取り込み時データ変換
1020             * @og.rev 3.8.8.5 (2007/03/09) 通常のパラメータ取得後に、CSVåˆ?§£に戻しますã?
1021             *
1022             * @param   clms ãƒ??タ変換を行うカラãƒ??(カンマ区åˆ?‚Šæ–?­?
1023             */
1024            public void setAdjustColumns( final String clms ) {
1025                    adjustColumns = nval( getRequestParameter( clms ),adjustColumns );
1026    
1027    //              adjustColumns = StringUtil.csv2Array( getRequestParameter( clms ) );
1028    //              if( adjustColumns.length == 0 ) { adjustColumns = null; }
1029            }
1030    
1031            /**
1032             * 【TAG】å?カラãƒ?ƒ�ェãƒ?‚¯を行うかどã�?�‹を設定しまã�?初期値:false)ã€?
1033             *
1034             * @og.tag
1035             * カラãƒ??整合æ?チェãƒ?‚¯を行う場合ã?カラãƒ?��を指定せずã?全カラãƒ??
1036             * チェãƒ?‚¯を実施することがå?来ますã?(allColumnCheck="true")
1037             * 初期値は、行わなã�?false)ですã?
1038             * 全カラãƒ?ƒ�ェãƒ?‚¯を行う場合ã?、checkColumns のæŒ?®šã?、無視されますã?
1039             *
1040             * @og.rev 3.6.0.2 (2004/10/04) 新規追åŠ?取り込み時å?チェãƒ?‚¯
1041             *
1042             * @param   flag 全チェãƒ?‚¯を行うかどã�?�‹(true:行う/false:行わなã�?
1043             * @see     #setCheckColumns( String )
1044             */
1045    //      public void setAllColumnCheck( final String flag ) {
1046    //              allColumnCheck = nval( getRequestParameter( flag ),allColumnCheck );
1047    //      }
1048    
1049            /**
1050             * 【TAG】NULL チェãƒ?‚¯すべきカラãƒ??をカンマ区åˆ?‚Š(CVS形å¼?でæŒ?®šしますã?
1051             *
1052             * @og.tag nullCheck="AAA,BBB,CCC,DDD"
1053             * åˆ?§£方法ã?ã€??常のパラメータ取得後に、CSVåˆ?§£しますã?
1054             *
1055             * @og.rev 3.8.0.2 (2005/06/30) 新規追åŠ?
1056             * @og.rev 3.8.8.5 (2007/03/09) 通常のパラメータ取得後に、CSVåˆ?§£に戻しますã?
1057             *
1058             * @param   clms カラãƒ??(CVS形å¼?
1059             */
1060            public void setNullCheck( final String clms ) {
1061                    nullCheck = nval( getRequestParameter( clms ),nullCheck );
1062    
1063    //              nullCheck = StringUtil.csv2Array( getRequestParameter( clms ) );
1064    //              if( nullCheck.length == 0 ) { nullCheck = null; }
1065            }
1066    
1067            /**
1068             * 【TAG】行番号æƒ??をã?使用してã�?‚‹/してã�?�ªい[true/false]を指定しまã�?初期値:true)ã€?
1069             *
1070             * @og.tag
1071             * 通常のフォーマットでは、各行ã?先é?に行番号がå?力されてã�?�¾すã?
1072             * 読み取り時にã€?NAME 属æ?を使用する場合ã?、この行番号を無視してã�?�¾すã?
1073             * #NAME 属æ?を使用せず、columns 属æ?でカラãƒ?��を指定するå?å�?他シスãƒ?ƒ の
1074             * 出力ファイルを読み取るケースç­?では、行番号も存在しなã�?‚±ースがありã?
1075             * そã?様な場合に、useNumber="false" を指定すれã?、データのæœ??から読み取り始めますã?
1076             * こã?場合ã?出力データのカラãƒ??並びé ?�Œ変更されたå?合ã?columns 属æ?ã‚?
1077             * æŒ?®šしなおすå¿?¦�がありますã?で、できるã�?�‘ã€?NAME 属æ?を使用するように
1078             * してくださいã€?
1079             * なおã?EXCEL 入力には、この設定ã?適用されませんã€?暫定対å¿?
1080             * 初期値は、true(使用する) ですã?
1081             *
1082             * @og.rev 3.7.0.5 (2005/04/11) 新規追åŠ?
1083             *
1084             * @param   useNo 行番号æƒ?? [true:使用する/false:使用しない]
1085             */
1086            public void setUseNumber( final String useNo ) {
1087                    useNumber = nval( getRequestParameter( useNo ),useNumber );
1088            }
1089    
1090            /**
1091             * 【TAG】読込件数が0件のときå?ç�?‚’続行するかどã�?�‹[true/false]を指定しまã�?初期値:false[続行する])ã€?
1092             *
1093             * @og.tag
1094             * 初期値は、false(続行すã‚?ですã?
1095             *
1096             * @og.rev 4.3.7.0 (2009/06/01) 新規追åŠ?
1097             *
1098             * @param  cmd 読込件数が0件のときã?処ç�?‚’ [true:中止する/false:続行する]
1099             */
1100            public void setStopZero( final String cmd ) {
1101                    stopZero = nval( getRequestParameter( cmd ), stopZero );
1102            }
1103    
1104            /**
1105             * 【TAGã€?通常使ã�?�¾せん)タグで処ç�?�•れる処ç�?�Œメインとなるトランザクション処ç�?�‹どã�?�‹を指定しまã�?初期値:false)ã€?
1106             *
1107             * @og.tag
1108             * こã?値は、ファイルãƒ?‚¦ンロードå?ç�?�«影響しますã?こã?値がtrueにæŒ?®šされた時にcommitされたDBTableModelã�?
1109             * ファイルãƒ?‚¦ンロードã?対象の表になりますã?
1110             *
1111             * こã?パラメーターはã€??常、各タグにより実è£?�•れã?ユーザーが指定するå¿?¦�ã?ありませんã€?
1112             * ä½?�—ã€?つのJSPå†?�§DBTableModelがè¤?•°生æ?されるå?合に、前に処ç�?�—たDBTableModelにつã�?�¦ファイルãƒ?‚¦ンロードをさせたい
1113             * 場合ã?、後ろでDBTableModelを生成するタグで、æ?示çš?�«こã?値をfalseにæŒ?®šすることで、ファイルãƒ?‚¦ンロードå?ç�??対象から
1114             * 除外することができますã?
1115             *
1116             * @og.rev 5.1.6.0 (2010/05/01) 新規作æ?
1117             *
1118             * @param  flag メイントランザクションかどã�?�‹
1119             */
1120            public void setMainTrans( final String flag ) {
1121                    isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
1122            }
1123    
1124            /**
1125             * 【TAGã€?通常は使ã�?�¾せん)ãƒ??タの読み飛ã?し件数を設定しますã?
1126             *
1127             * @og.tag
1128             * TAB区åˆ?‚Šãƒ?‚­ストやEXCEL等ã?ãƒ??タの読み始めの初期値を指定しますã?
1129             * ファイルの先é?行がã€?¼�行としてカウントしますã?で、設定å?は、読み飛ã?ã�?
1130             * 件数になりますã?(?‘とæŒ?®šするとã€?¼‘件読み飛ã?しã??’行目から読み込みますã?)
1131             * 読み飛ã?しã?、コメント行などは、無視しますã?で、実際の行数åˆ?ª­み飛ã?しますã?
1132             * ?ƒNAME属æ?ã‚??columns 属æ?は、有効ですã?
1133             *
1134             * @og.rev 5.1.6.0 (2010/05/01) 新規作æ?
1135             *
1136             * @param       count 読み始めの初期値
1137             */
1138            public void setSkipRowCount( final String count ) {
1139                    skipRowCount = nval( getRequestParameter( count ),skipRowCount );
1140            }
1141    
1142            /**
1143             * 【TAG】読取å?ç�?�§ラベルをコードリソースにé€?¤‰換を行うかどã�?�‹を指定しまã�?
1144             *              (初期値:USE_TABLE_READER_RENDERER[={@og.value org.opengion.hayabusa.common.SystemData#USE_TABLE_READER_RENDERER}])ã€?
1145             *
1146             * @og.tag
1147             * TableWriter_Renderer 系のクラスで出力したå?合ã?、コードリソースがラベルで出力されますã?
1148             * そã?ファイルを読み取ると、当然、エラーになりますã?
1149             * ここでは、コードリソースのカラãƒ?�«対して、ラベルからコードを求めるé?変換を行うことでã€?
1150             * Renderer 系で出力したファイルを取り込ã‚?�“とができるようにしますã?
1151             *
1152             * ここでは、TableWriter 系と同様に、TableReader_Renderer 系のクラスを作るのではなくã?
1153             * 属æ?値のフラグで、制御しますã?
1154             * å°?�¥çš?�«は、TableWriter 系もå»?­¢して、同様ã?フラグで制御するように変更する予定ですã?
1155             * (初期値:シスãƒ?ƒ 定数のUSE_TABLE_READER_RENDERER[={@og.value org.opengion.hayabusa.common.SystemData#USE_TABLE_READER_RENDERER}])ã€?
1156             *
1157             * @og.rev 5.2.1.0 (2010/10/01) 新規作æ?
1158             *
1159             * @param  flag コードリソースのラベルé€?¤‰換を行うかどã�?�‹
1160             * @see         org.opengion.hayabusa.common.SystemData#USE_TABLE_READER_RENDERER
1161             */
1162            public void setUseRenderer( final String flag ) {
1163                    useRenderer = nval( getRequestParameter( flag ),useRenderer );
1164            }
1165    
1166            /**
1167             * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
1168             *
1169             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
1170             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
1171             *
1172             * @param       strm    ObjectOutputStreamオブジェクãƒ?
1173             * @throws IOException  入出力エラーが発生したå?å�?
1174             */
1175            private void writeObject( final ObjectOutputStream strm ) throws IOException {
1176                    strm.defaultWriteObject();
1177            }
1178    
1179            /**
1180             * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
1181             *
1182             * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
1183             *
1184             * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
1185             * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
1186             *
1187             * @param       strm    ObjectInputStreamオブジェクãƒ?
1188             * @see #release2()
1189             * @throws IOException  シリアライズに関する入出力エラーが発生したå?å�?
1190             * @throws ClassNotFoundException       クラスを見つけることができなかったå?å�?
1191             */
1192            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
1193                    strm.defaultReadObject();
1194            }
1195    
1196            /**
1197             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
1198             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
1199             *
1200             * @return こã?クラスのæ–?­—å?表現
1201             */
1202            @Override
1203            public String toString() {
1204                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
1205                                    .println( "VERSION"                     ,VERSION        )
1206                                    .println( "separator"           ,separator              )
1207                                    .println( "fileURL"             ,fileURL                )
1208                                    .println( "filename"            ,filename               )
1209                                    .println( "encode"                      ,encode                 )
1210                                    .println( "readerClass"         ,readerClass    )
1211                                    .println( "maxRowCount"         ,maxRowCount    )
1212                                    .println( "displayMsg"          ,displayMsg             )
1213                                    .println( "executeCount"        ,executeCount   )
1214                                    .println( "modifyType"          ,modifyType             )
1215                                    .println( "checkColumns"        ,checkColumns   )
1216                                    .println( "adjustColumns"       ,adjustColumns  )
1217                                    .println( "nullCheck"           ,nullCheck              )
1218    //                              .println( "allColumnCheck"      ,allColumnCheck )
1219                                    .println( "command"                     ,command                )
1220                                    .println( "tableId"                     ,tableId                )
1221                                    .println( "sheetName"           ,sheetName              )
1222                                    .println( "sheetNos"            ,sheetNos               )               // 5.5.7.2 (2012/10/09)
1223                                    .println( "columns"                     ,columns                )
1224                                    .println( "useNumber"           ,useNumber              )
1225                                    .println( "Other..."    ,getAttributes().getAttribute() )
1226                                    .fixForm().toString() ;
1227            }
1228    }