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.io.TableWriter;
022    import org.opengion.fukurou.util.FileUtil;
023    import org.opengion.fukurou.util.HybsEntry;
024    import org.opengion.fukurou.util.Closer ;
025    import org.opengion.fukurou.util.StringUtil ;
026    import static org.opengion.fukurou.util.StringUtil.nval ;
027    
028    import javax.servlet.ServletResponse ;
029    import javax.servlet.http.HttpServletResponse ;
030    import javax.servlet.jsp.JspWriter ;
031    
032    import java.util.zip.GZIPOutputStream;
033    import java.util.zip.ZipOutputStream;
034    import java.util.zip.ZipEntry;
035    import java.util.List;
036    import java.util.ArrayList;
037    import java.util.Locale;
038    import java.io.File;
039    import java.io.OutputStream;
040    import java.io.PrintWriter;
041    import java.io.FileOutputStream;
042    import java.io.ByteArrayOutputStream;
043    import java.io.ObjectOutputStream;
044    import java.io.ObjectInputStream;
045    import java.io.IOException;
046    
047    /**
048     * DBTableModelオブジェクトを??ファイルに出力するタグです?
049     *
050     * ??タ(DBTableModel)と、コントローラ(WriteTableTagForm)を与えて?
051     * 外部からコントロールすることで、各種形式で ??タ(DBTableModel)を表示できます?
052     * writeTableタグ に対して、コマンドを与えることにより、?部のコントローラの
053     * 実?対応した? 形式で??タを作?します?
054     *
055     * @og.formSample
056     * ●形式?
057     *     <og:writeTable
058     *         fileURL   = "{@USER.ID}"    保存??レクトリ?
059     *         filename  = "{@filename}"   保存ファイル?
060     *         encode    = "UnicodeLittle"      保存ファイルエンコード名
061     *     />
062     *
063     * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま?
064     *
065     * ●Tag定義??
066     *   <og:writeTable
067     *       writerClass        【TAG】実際に書き?すクラス名?略称(TableWriter_**** クラスの ****)を指定しま?初期値:Default)
068     *       separator          【TAG】可変長ファイルを作?するとき??区??をセ?しま?(初期値:TableWriter#TAB_SEPARATOR[= ])
069     *       headerSequence     【TAG】DBTableModelの出力?(LNSCD など)をセ?しま?
070     *       fileURL            【TAG】ファイル保存??レクトリ名を?しま?
071     *       filename           【TAG】ファイルを作?するとき?ファイル名をセ?しま?(初期値:FILE_FILENAME[=UnicodeLittle])
072     *       beforeDelete       【TAG】事前にファイルを削除するかど?をセ?しま?(初期値:false)
073     *       encode             【TAG】ファイルを作?するとき?ファイルエンコー?ング名をセ?しま?(初期値:FILE_ENCODE[=UnicodeLittle])
074     *       fileAppend         【TAG】追?ードで書き込?ど?[true/false]を指定しま?初期値:false[新規モード])
075     *       direct             【?】結果をダイレクトにEXCEL起動するかど?[true/false]を指定しま?初期値:false[ファイル])
076     *       zip                【TAG】結果をファイルに出力するときに、ZIPで圧縮するかど?[true/false]を指定しま?初期値:false)
077     *       tableId            【TAG?通常使?せん)sessionから?す?DBTableModelオブジェクト? ID
078     *       scope              【TAG】キャ?ュする場合?スコープ[request/page/session/applicaton]を指定しま?初期値:session)
079     *       disposition        【TAG】Content-Disposition (inline:埋め込?attachment:?アログを起?を指定しま?初期値:attachment)
080     *       sheetName          【TAG】EXCELファイルを書き?すとき?シート名を設定しま?
081     *       refSheetName       【TAG】EXCEL雛型参?ファイルのシート名を設定しま?
082     *       refFileURL         【TAG】EXCEL雛型参?ファイルの?レクトリ名をセ?しま?
083     *       refFilename        【TAG】EXCEL雛型参?ファイル名をセ?しま?
084     *       useNumber          【TAG】行番号??を?出力す?しない[true/false]を指定しま?初期値:true)
085     *       columns            【TAG】書き込み先ファイルのカラ??を?外部(タグ)より?しま?
086     *       useRenderer        【TAG】書込処?コードリソースのラベル変換を行うかど?を指定しま?(初期値:USE_TABLE_WRITER_RENDERER[=false])
087     *       selectedAll        【TAG】チェ?行?みを対象にするかを?しま?初期値:true)?
088     *       fontName           【TAG】EXCEL出力時の?ォルトフォント名を設定しま?(初期値:TABLE_WRITER_DEFAULT_FONT_NAME[=?? ?ゴシ?])
089     *       fontPoint          【TAG】EXCEL出力時の?ォルトフォント?イント数を設定しま?
090     *       language           【TAG】タグ?で使用する?コード[ja/en/zh/…]を指定しま?
091     *       caseKey            【TAG】このタグ自体を利用するかど?の条件キーを指定しま?初期値:null) 5.7.7.2 (2014/06/20)
092     *       caseVal            【TAG】このタグ自体を利用するかど?の条件値を指定しま?初期値:null) 5.7.7.2 (2014/06/20)
093     *       caseNN             【TAG】指定?値が?null/ゼロ?? でな???Not Null=NN)は、このタグは使用されま?初期値:true) 5.7.7.2 (2014/06/20)
094     *       caseNull           【TAG】指定?値が?null/ゼロ?? の場合?、このタグは使用されま?初期値:true) 5.7.7.2 (2014/06/20)
095     *       debug              【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
096     *   >   ... Body ...
097     *   </og:writeTable>
098     *
099     * ●使用?
100     *     <og:writeTable ????? >
101     *         <og:writeTableParam
102     *             key  = "Tablename"  value="GE12"
103     *         />
104     *         <og:writeTableParam
105     *             key  = "First"             First:??に登録
106     *         >
107     *                      insert into GE12bk
108     *                         select * from GE12
109     *                         where SYSTEM_ID='**'
110     *         </og:writeTableParam
111     *         <og:writeTableParam
112     *             key  = "First"             First:の?番目に登録
113     *         >
114     *              delete from GE12 where SYSTEM_ID='**' and KBSAKU='0'
115     *         </og:writeTableParam
116     *         <og:writeTableParam
117     *             key  = "Last"              Last:?に登録
118     *         >
119     *              update GE12 set XXXX='YYYY' where SYSTEM_ID='**' and KBSAKU='0'
120     *         </og:writeTableParam
121     *     </og:writeTableParam
122     *
123     * @og.group ファイル出?
124     *
125     * @version  4.0
126     * @author   Kazuhiko Hasegawa
127     * @since    JDK5.0,
128     */
129    public class WriteTableTag extends CommonTagSupport {
130            //* こ?プログラ??VERSION??を設定します?       {@value} */
131            private static final String VERSION = "5.7.7.2 (2014/06/20)" ;
132    
133            private static final long serialVersionUID = 577220140620L ;
134    
135            private final String  BASE_URL  = HybsSystem.sys( "FILE_URL" );
136    
137            private String  separator               = TableWriter.TAB_SEPARATOR;     // ?区???
138            private String  headerSequence  = null;                 // ヘッ???の並び?
139            private String  fileURL                 = BASE_URL;
140            private String  filename                = HybsSystem.sys( "FILE_FILENAME" );   // ファイル?
141            private String  refFileURL              = BASE_URL;             // 3.5.4.3 (2004/01/05)
142            private String  refFilename     = null;                 // 3.5.4.3 (2004/01/05)
143            private String  fontName                = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_NAME" );                   // 3.8.5.3 (2006/08/07)
144            private String  fontPoint               = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_POINTS" );                 // 3.8.5.3 (2006/08/07)
145            private String  encode                  = HybsSystem.sys( "FILE_ENCODE" );      // ファイルエンコー?ング  "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
146            private String  writerClass     = HybsSystem.sys( "TABLE_WRITER_DEFAULT_CLASS" );               // 3.8.5.3 (2006/08/07)
147            private boolean fileAppend              = false;                // ファイルをAPPENDモードで出力するか
148            private boolean direct                  = false;
149            private boolean zip                     = false;
150            private String  disposition     = "attachment";   // 3.8.0.9 (2005/10/17) Content-Disposition 初期値変更 inline ?attachment
151    
152            private transient DBTableModel table      = null;
153            private String  tableId                 = HybsSystem.TBL_MDL_KEY ;
154            private String  sheetName               = "Sheet1" ;    // 3.5.4.2 (2003/12/15)
155            private String  refSheetName    = null ;                // 3.5.4.3 (2004/01/05)
156            private String  directory               = null ;                // 3.8.6.0 (2006/08/23)
157    
158            private transient List<HybsEntry> param   = null ;                // 4.0.0 (2005/02/28)
159    
160            private boolean useNumber               = true;                 // 3.7.0.2 (2005/02/14)
161            // 4.0.0 (2005/12/31) 外部よりカラ??(カンマ区?)を指定できるようにする?
162            private String          columns         = null;
163            // 5.2.1.0 (2010/10/01) 書込処?コードリソースのラベル変換を行うかど?
164            private boolean useRenderer             = HybsSystem.sysBool( "USE_TABLE_WRITER_RENDERER" );    // 5.2.1.0 (2010/10/01)
165            
166            // 5.5.5.5 (2012/08/24) チェ?対?
167            private boolean selectedAll             = true;                 // 5.5.5.5 (2012/08/24)
168    
169            // 5.5.9.1 (2012/12/07) 事前にファイルを削除するかど?。互換性のため、false に設定?推奨は、true
170            private boolean beforeDelete    = false;                // 5.5.9.1 (2012/12/07) 事前にファイルを削除するかど??
171    
172            /**
173             * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
174             *
175             * @og.rev 5.5.9.1 (2012/12/07) 事前にファイルを削除するかど???eforeDelete?フラグを追?
176             * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属?を追?
177             *
178             * @return      後続????( EVAL_BODY_BUFFERED )
179             */
180            @Override
181            public int doStartTag() {
182                    // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属?を追?
183                    if( !useTag() ) { return SKIP_BODY ; }
184    
185                    directory = HybsSystem.url2dir( fileURL );              // 5.5.9.1 (2012/12/07) doEndTag() から移?
186    
187                    // 5.5.9.1 (2012/12/07) 事前にファイルを削除するかど?
188                    if( beforeDelete && !fileAppend ) {
189                            File delFile = null;
190                            if( zip ) { delFile = new File( directory,filename + ".zip" ); }
191                            else      { delFile = new File( directory,filename ); }
192                            if( delFile.exists() ) { delFile.delete(); }
193                    }
194    
195                    return EVAL_BODY_BUFFERED ;     // Body を評価する? extends BodyTagSupport ?
196            }
197    
198            /**
199             * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします?
200             *
201             * @og.rev 2.1.3.1 (2002/12/13) ContentType を?x-msexcel から vnd.ms-excel に変更した?
202             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
203             * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得する?
204             * @og.rev 3.1.5.0 (2003/04/20) Content-Disposition を外部から?できるように変更?
205             * @og.rev 3.2.0.0 (2003/05/22) GZIPOutputStream を使用して?が?ZipOutputStream に変更?
206             * @og.rev 3.5.4.1 (2003/12/01) 引数の PrintWriter を?OutputStream に変更?
207             * @og.rev 3.5.4.3 (2004/01/05) 引数を? PrintWriter に戻す?
208             * @og.rev 3.6.0.2 (2004/10/04) EXCEL?レクト?力時にファイルエンドまで出力されな??合対?
209             * @og.rev 3.8.0.9 (2005/10/17) disposition属?を使用できるように変更します?
210             * @og.rev 3.8.6.0 (2006/08/23) フォル?な??合?、?階層??フォル?自動で作?します?
211             * @og.rev 4.3.4.3 (2008/12/22) Excel出力?判別方法を前方??に変更
212             * @og.rev 5.1.6.0 (2010/05/01) 画面帳票作?機?対?
213             * @og.rev 5.5.2.0 (2012/05/01) ZIP時にもencodeが有効にする
214             * @og.rev 5.5.5.5 (2012/08/24) selectedAllの処?追?
215             * @og.rev 5.5.9.1 (2012/12/07) beforeDeleteフラグの追?伴??ロジ?変更
216             * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属?を追?
217             *
218             * @return      後続????
219             */
220            @Override
221            public int doEndTag() {
222                    debugPrint();           // 4.0.0 (2005/02/28)
223    
224                    // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属?を追?
225                    if( !useTag() ) { return EVAL_PAGE ; }
226    
227                    table = (DBTableModel)getObject( tableId );
228                    if( ! selectedAll ){ // 5.5.5.5 (2012/08/24) 
229                            table = getSelRowsTable( table );
230                    }
231                    if( table != null && table.getRowCount() > 0 ) {
232    
233                            File dir = new File(directory);
234                            if( ! dir.exists() && ! dir.mkdirs() ) {
235                                    String errMsg = "?レクトリの作?に失敗しました?" + directory + "]";
236                                    throw new HybsSystemException( errMsg );
237                            }
238    
239                            PrintWriter pw = null;
240                            ByteArrayOutputStream bt = null ;
241                            try {
242                                    if( direct ) {
243                                            if( zip ) {
244                                                    bt = new ByteArrayOutputStream();
245                                                    pw = new PrintWriter( bt );
246                                                    create( pw ) ;
247                                                    pw.flush();                             // 3.6.0.2 (2004/10/04)
248                                                    ServletResponse response = pageContext.getResponse() ;
249                                                    ((HttpServletResponse)response).addHeader( "Content-Encoding","gzip" );
250    
251                                                    GZIPOutputStream gzip = new GZIPOutputStream(bt);
252                                                    gzip.finish() ;
253                                                    response.setContentLength( bt.size() );
254    
255                                                    JspWriter out = pageContext.getOut();
256                                                    out.clear();
257                                                    out.print( bt );
258                                                    out.flush();                    // 3.6.0.2 (2004/10/04)
259                                            }
260                                            else {
261                                                    bt = new ByteArrayOutputStream();
262                                                    pw = new PrintWriter( bt );
263                                                    create( pw ) ;
264                                                    pw.flush();                             // 3.6.0.2 (2004/10/04)
265                                                    ServletResponse response = pageContext.getResponse() ;
266                                                    response.setContentType( "application/vnd.ms-excel; charset=" + encode );
267            //                                      response.setContentType( "application/x-msexcel; charset=" + encode );
268            //                                      response.setContentType( "text/comma-separated-values ; charset=" + encode );
269            //                                      ((HttpServletResponse)response).setHeader( "contentType","application/x-msexcel; charset=Shift_JIS" );
270            //                                      ((HttpServletResponse)response).setHeader( "Content-Disposition","attachment; filename=\"" + filename + "\"" );
271            //                                      ((HttpServletResponse)response).setHeader( "Content-Disposition","inline; filename=\"" + filename + "\"" );
272                                                    // 3.8.0.9 (2005/10/17) disposition属?を使用できるように変更します?
273                                                    ((HttpServletResponse)response).setHeader( "Content-Disposition",disposition + "; filename=\"" + filename + "\"" );
274    
275                                                    JspWriter out = pageContext.getOut();
276                                                    out.clear();
277                                                    out.print( bt );
278                                                    out.flush();                    // 3.6.0.2 (2004/10/04)
279                                            }
280                                    }
281                                    else {
282                                    // 3.2.0.0 (2003/05/22) GZIPOutputStream を使用して?が?ZipOutputStream に変更?
283                                            if( zip ) {
284                                                    bt = new ByteArrayOutputStream();
285                                                    if( writerClass.toUpperCase(Locale.JAPAN).startsWith("EXCEL") // 5.5.2.0(2012/05/01)
286                                                                    || writerClass.toUpperCase(Locale.JAPAN).startsWith("CALC") ) {
287                                                            pw = new PrintWriter( bt );
288                                                    }
289                                                    else{
290                                                            pw = getPrintWriter(bt);
291                                                    }
292                                                    create( pw ) ;
293                                                    pw.flush();                             // 3.6.0.2 (2004/10/04)
294    
295                                                    ZipOutputStream gzip = null;
296                                                    try {
297                                                            gzip = new ZipOutputStream(
298                                                                                            new FileOutputStream(
299                                                                                                    StringUtil.urlAppend( directory,filename + ".zip" )));
300                                                            gzip.putNextEntry( new ZipEntry( filename ) );
301                                                            (bt).writeTo( gzip );
302                                                            gzip.finish() ;
303                                                    }
304                                                    finally {
305                                                            Closer.ioClose( gzip );         // 4.0.0 (2006/01/31) close 処?の IOException を無?
306                                                    }
307                                            }
308                                            else {
309                                                    // if( "Excel".equalsIgnoreCase( writerClass ) ) {
310                                                    if( writerClass.toUpperCase(Locale.JAPAN).startsWith("EXCEL") // 4.3.4.3 (2008/12/22)
311                                                            ||  writerClass.toUpperCase(Locale.JAPAN).startsWith("CALC") ) { // 5.1.6.0 (2010/05/01)
312                                                            create( null );
313                                                    }
314                                                    else {
315                                                            pw = getPrintWriter();
316                                                            create( pw );
317                                                            pw.flush();                             // 3.6.0.2 (2004/10/04)
318                                                    }
319                                            }
320                                    }
321                            }
322                            catch( IOException ex ) {
323                                    String errMsg = "??ブル出力時に、IOエラーが発生しました? + toString();
324                                    throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並び?更
325                            }
326                            finally {
327                                    Closer.ioClose( pw );           // 4.0.0 (2006/01/31) close 処?の IOException を無?
328                                    Closer.ioClose( bt );           // 4.0.0 (2006/01/31) close 処?の IOException を無?
329                            }
330                    }
331    
332                    return EVAL_PAGE ;
333            }
334    
335            /**
336             * タグリブオブジェクトをリリースします?
337             * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
338             *
339             * @og.rev 2.0.0.4 (2002/09/27) カスタ?グの release() メソ?を?追?
340             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
341             * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得する?
342             * @og.rev 3.1.5.0 (2003/04/20) Content-Disposition を外部から?できるように変更?
343             * @og.rev 3.5.4.2 (2003/12/15) EXCELのシート名を指定できるように変更?
344             * @og.rev 3.5.4.3 (2004/01/05) EXCEL雛型参?ファイルのURL,filenameを追?ます?
345             * @og.rev 3.8.5.3 (2006/08/07) writerClass 属?の初期値をシス?リソースより取得します?
346             * @og.rev 3.8.5.3 (2006/08/07) fontName 属?を追?ます?
347             * @og.rev 3.8.5.3 (2006/08/07) fontPoint 属?を追?ます?
348             * @og.rev 3.8.6.0 (2006/08/23) directory 属?を追?ます?
349             * @og.rev 4.0.0.0 (2005/02/28) XMLファイルにセ?する、param を追??
350             * @og.rev 5.2.1.0 (2010/10/01) 書込処?コードリソースのラベル変換を行うかど? useRenderer 属?追?
351             * @og.rev 5.5.5.5 (2012/08/24) selectedAll属?を追?
352             * @og.rev 5.5.9.1 (2012/12/07) 事前にファイルを削除するかど?。互換性のため、false に設定?推奨は、true
353             *
354             */
355            @Override
356            protected void release2() {
357                    super.release2();
358                    separator               = TableWriter.TAB_SEPARATOR;   // ?区???
359                    headerSequence  = null;   // ヘッ???の並び?
360                    fileURL                 = BASE_URL;
361                    filename                = HybsSystem.sys( "FILE_FILENAME" );   // ファイル?
362                    beforeDelete    = false;                // 5.5.9.1 (2012/12/07)
363                    refFileURL              = BASE_URL;             // 3.5.4.3 (2004/01/05)
364                    refFilename     = null;                 // 3.5.4.3 (2004/01/05)
365                    fontName                = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_NAME" );                   // 3.8.5.3 (2006/08/07)
366                    fontPoint               = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_POINTS" );                 // 3.8.5.3 (2006/08/07)
367                    encode                  = HybsSystem.sys( "FILE_ENCODE" );       // ファイルエンコー?ング  "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
368                    writerClass     = HybsSystem.sys( "TABLE_WRITER_DEFAULT_CLASS" );               // 3.8.5.3 (2006/08/07)
369                    fileAppend              = false;   // ファイルをAPPENDモードで出力するか
370                    direct                  = false;
371                    zip                     = false;
372                    table                   = null;
373                    tableId                 = HybsSystem.TBL_MDL_KEY ;
374                    disposition     = "attachment";         // 3.8.0.9 (2005/10/17) 初期値変更 inline ?attachment
375                    sheetName               = "Sheet1";             // 3.5.4.2 (2003/12/15)
376                    refSheetName    = null;                 // 3.5.4.2 (2003/12/15)
377                    param                   = null ;                // 4.0.0 (2005/01/31)
378                    useNumber               = true;                 // 3.7.0.2 (2005/02/14)
379                    directory               = null;                 // 3.8.6.0 (2006/08/23)
380                    columns                 = null;                 // 4.0.0 (2005/12/31)
381                    useRenderer             = HybsSystem.sysBool( "USE_TABLE_WRITER_RENDERER" );    // 5.2.1.0 (2010/10/01)
382                    selectedAll             = true;                 // 5.5.5.5 (2012/08/24)
383            }
384    
385            /**
386             * TableWriter の実オブジェクトを生?して?OutputStream に書き込みます?
387             *
388             * @og.rev 3.5.4.1 (2003/12/01) 引数の PrintWriter を?OutputStream に変更?
389             * @og.rev 3.5.4.2 (2003/12/15) lang 引数?table と同時に設定します?
390             * @og.rev 3.5.4.2 (2003/12/15) TableWriter のサブクラス名変更?
391             * @og.rev 3.5.4.3 (2004/01/05) EXCEL雛型参?ファイルを指定するよ?変更?
392             * @og.rev 3.5.4.3 (2004/01/05) 引数を? PrintWriter に戻す?
393             * @og.rev 3.5.4.5 (2004/01/23) ?エンコードを渡すよ?変更する?
394             * @og.rev 3.5.6.0 (2004/06/18) ?プラグイン関連付け設定を、シス?パラメータ に記述します?
395             * @og.rev 3.8.5.3 (2006/08/07) EXCEL時に fontName と fontPoint 属?をセ?します?
396             * @og.rev 4.0.0.0 (2005/01/31) キーの?を、TableWriter. から、TableWriter_ に変更します?
397             * @og.rev 4.0.0.0 (2005/12/31) 外部よりカラ??(カンマ区?)を指定できるようにする?
398             * @og.rev 5.2.1.0 (2010/10/01) 書込処?コードリソースのラベル変換を行うかど?設?useRenderer 属?追?
399             *
400             * @param   out PrintWriterオブジェク?
401             */
402            private void create( final PrintWriter out )  {
403                    // 5.2.1.0 (2010/10/01) writerClass で Renderer系の場合?、useRendererフラグに変更する?
404                    if( "ExcelRenderer".equalsIgnoreCase( writerClass ) ) {
405                            writerClass = "Excel" ;
406                            useRenderer = true;
407                    }
408                    else if( "Renderer".equalsIgnoreCase( writerClass ) ) {
409                            writerClass = "Default" ;
410                            useRenderer = true;
411                    }
412    
413                    String className = HybsSystem.sys( "TableWriter_" + writerClass ) ;             // 4.0.0 (2005/01/31)
414                    TableWriter writer = (TableWriter)HybsSystem.newInstance( className );  // 3.5.5.3 (2004/04/09)
415    
416                    writer.setDBTableModel( table,getLanguage() );
417                    writer.setSeparator( separator );
418                    writer.setHeaderSequence( headerSequence );
419                    writer.setEncode( encode );                                     // 3.5.4.5 (2004/01/23)
420                    writer.setAppend( fileAppend );                         // 3.5.4.2 (2003/12/15)
421                    if( param != null ) { writer.setParam( param ); }       // 4.0.0 (2005/01/31)
422                    writer.setUseNumber( useNumber );                       // 3.7.0.2 (2005/02/14)
423            //      if( columns == null ) {
424            //              columns = (String)getSessionAttribute( HybsSystem.TBL_WRITER_CLMS );
425            //              removeSessionAttribute( HybsSystem.TBL_WRITER_CLMS );
426            //      }
427                    writer.setColumns( columns );                           // 4.0.0 (2005/12/31)
428                    writer.setUseRenderer( useRenderer );           // 5.2.1.0 (2010/10/01)
429                    if( writer.isExcel() ) {                                        // 3.5.4.3 (2004/01/05)
430                            writer.setSheetName( sheetName );
431                            writer.setFilename( StringUtil.urlAppend( directory , filename ) );
432                            if( refFileURL != null && refFilename != null ) {
433                                    writer.setRefFilename( StringUtil.urlAppend( HybsSystem.url2dir(refFileURL) , refFilename ) );
434                            }
435                            writer.setRefSheetName( refSheetName );
436                            writer.setFontName( nval( fontName,null ) );                    // 3.8.5.3 (2006/08/07)
437                            if( fontPoint != null && fontPoint.length() > 0 ) {
438                                    writer.setFontPoint( Short.parseShort( fontPoint ) );   // 3.8.5.3 (2006/08/07)
439                            }
440                            writer.writeDBTable();
441                    }
442                    else {
443                            writer.writeDBTable( out );
444                    }
445            }
446    
447            /**
448             * PrintWriter を取得します?
449             *
450             * ここでは、??ファイル出力を??した PrintWriter を作?します?
451             *
452             * @og.rev 2.2.0.0 (2002/12/17) 中国?国際化)対?エンコード?取得方法変更
453             * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得する?
454             * @og.rev 3.5.4.1 (2003/12/01) PrintWriter を?OutputStream に変更?
455             * @og.rev 3.5.5.9 (2004/06/07) FileUtil.getBufferedReader を使用
456             * @og.rev 3.7.1.1 (2005/05/23) フォル?な??合?、?階層??フォル?自動で作?します?
457             * @og.rev 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用?
458             *
459             * @return      ファイル書き?し用のPrintWriterオブジェク?
460             */
461            private PrintWriter getPrintWriter() {
462                    if( filename == null ) {
463                            String errMsg = "ファイル名がセ?されて?せん?;
464                            throw new HybsSystemException( errMsg );
465                    }
466    
467                    // ※ 注?StringUtil.urlAppend を?込んで?意図が不?。?削除して?すが、注?
468                    // 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用?
469            //      out = FileUtil.getPrintWriter( StringUtil.urlAppend( directory,filename ),fileAppend,encode);
470                    PrintWriter out = FileUtil.getPrintWriter( new File( directory,filename ),encode,fileAppend );
471    
472                    return out ;
473            }
474    
475            /**
476             * PrintWriter を取得します?
477             *
478             * 引数で?したOutputStreamを利用して出力します?
479             *
480             * @og.rev 5.5.2.0 (2012/05/01) 新規作?
481             *
482             * @param       os      OutputStreamオブジェク?
483             *
484             * @return      ?したstreamに書き?すPrintWriter
485             */
486            private PrintWriter getPrintWriter( final OutputStream os ) {
487                    PrintWriter out = FileUtil.getPrintWriter( os,encode );
488    
489                    return out ;
490            }
491            
492            /**
493             * チェ?????ブルモ?を?構?します?
494             *
495             * @og.rev 5.5.5.5 (2012/08/24) 新規作?
496             * @og.rev 5.5.9.1 (2012/12/07) ?処?更
497             *
498             * @param       oldTable        コピ??ーブルモ?
499             *
500             * @return      チェ?した?けで再構?した??ブルモ?
501             */
502            private DBTableModel getSelRowsTable( final DBTableModel oldTable ) {
503                    if( oldTable == null ) { return null; }         // 5.5.9.1 (2012/12/07) 引数のDBTableModel?null の場合?処??
504    
505                    DBTableModel newTable = oldTable.newModel();
506                    final int[] rowNo = getParameterRows();
507                    final int rowCount = rowNo.length ;
508    
509                    for( int i=0; i<rowCount; i++ ) {
510                            newTable.addValues( oldTable.getValues(rowNo[i]), i );
511                    }
512                    return newTable;
513            }
514    
515            /**
516             * 【TAG?通常は使?せん)結果のDBTableModelを?sessionに登録するとき?キーを指定しま?
517             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])?
518             *
519             * @og.tag
520             * 検索結果より、DBTableModelオブジェクトを作?します?これを?下流?viewタグ等に
521             * 渡す?合に??常は、session を利用します?そ?場合?登録キーです?
522             * query タグを同時に実行して、結果を求める?合?同?モリに配置される為?
523             * こ? tableId 属?を利用して、メモリ空間を?ます?
524             *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value org.opengion.hayabusa.common.HybsSystem#TBL_MDL_KEY}])?
525             *
526             * @param       id sessionに登録する時? ID
527             */
528            public void setTableId( final String id ) {
529                    tableId = nval( getRequestParameter( id ), tableId );
530            }
531    
532            /**
533             * 【TAG】可変長ファイルを作?するとき??区??をセ?しま?
534             *              (初期値:TableWriter#TAB_SEPARATOR[={@og.value TableWriter#TAB_SEPARATOR}])?
535             *
536             * @og.tag 可変長ファイルを作?するとき??区??をセ?します?
537             * (初期値:TableWriter#TAB_SEPARATOR[={@og.value TableWriter#TAB_SEPARATOR}])?
538             *
539             * @param   separator ?区???
540             * @see         org.opengion.hayabusa.io.TableWriter#TAB_SEPARATOR
541             */
542            public void setSeparator( final String separator ) {
543                    this.separator = nval( getRequestParameter( separator ),this.separator );
544            }
545    
546            /**
547             * 【TAG】DBTableModelの出力?(LNSCD など)をセ?します?
548             *
549             * @og.tag
550             * Label,Name,Size,Class,Data の?ィールド?頭??アルファベットで
551             * 出力?を設定します?
552             *
553             * @param   hs 出力? (LNSCD など)
554             */
555            public void setHeaderSequence( final String hs ) {
556                    String[] headers = getRequestParameterValues( hs );
557                    if( headers != null ) {
558                            StringBuilder buf = new StringBuilder();
559                            for( int i=0; i<headers.length; i++ ) {
560                                    if( headers[i] != null ) { buf.append( headers[i] ); }
561                            }
562                            headerSequence = buf.toString();
563                    }
564            }
565    
566            /**
567             * 【TAG】EXCEL雛型参?ファイルの?レクトリ名をセ?します?
568             *
569             * @og.tag
570             * こ?属?で?される?レクトリに、ファイルをセーブします?
571             * ?方法???常の fileURL 属?と同様に、?頭が?'/' (UNIX) また??文字目が?
572             * ":" (Windows)の場合?、指定?URLそ?ままの?レクトリに、そ?な??合??
573             * シス?パラメータ の FILE_URL 属?で??フォル??下に、作?されます?
574             * fileURL = "{&#064;USER.ID}" と?すると、FILE_URL 属?で??フォル??下に?
575             * さらに、各個人ID別のフォル?作?して、そこにセーブします?
576             *
577             * @og.rev 3.5.4.3 (2004/01/05) 新規作?
578             * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソ?の利用
579             * @og.rev 4.0.0.0 (2007/11/20) ?された?レクトリ名??が"\"or"/"で終わって???合に?/"を付加する?
580             *
581             * @param       url EXCEL雛型参?ファイルの?レクトリ?
582             */
583            public void setRefFileURL( final String url ) {
584                    String furl = nval( getRequestParameter( url ),null );
585                    if( furl != null ) {
586                            char ch = furl.charAt( furl.length()-1 );
587                            if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
588                            refFileURL = StringUtil.urlAppend( refFileURL,furl );
589                    }
590            }
591    
592            /**
593             * 【TAG】ファイル保存??レクトリ名を?します?
594             *
595             * @og.tag
596             * こ?属?で?される?レクトリに、ファイルをセーブします?
597             * ?方法???常の fileURL 属?と同様に、?頭が?'/' (UNIX) また??文字目が?
598             * ":" (Windows)の場合?、指定?URLそ?ままの?レクトリに、そ?な??合??
599             * シス?パラメータ の FILE_URL 属?で??フォル??下に、作?されます?
600             * fileURL = "{&#064;USER.ID}" と?すると、FILE_URL 属?で??フォル??下に?
601             * さらに、各個人ID別のフォル?作?して、そこにセーブします?
602             *
603             * @og.rev 3.5.4.3 (2004/01/05) ?処?、makeFileURL に移動?
604             * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソ?の利用
605             * @og.rev 4.0.0.0 (2007/11/20) ?された?レクトリ名??が"\"or"/"で終わって???合に?/"を付加する?
606             *
607             * @param       url 保存??レクトリ?
608             */
609            public void setFileURL( final String url ) {
610                    String furl = nval( getRequestParameter( url ),null );
611                    if( furl != null ) {
612                            char ch = furl.charAt( furl.length()-1 );
613                            if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
614                            fileURL = StringUtil.urlAppend( fileURL,furl );
615                    }
616            }
617    
618            /**
619             * 【TAG】ファイルを作?するとき?ファイル名をセ?しま?
620             *              (初期値:FILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])?
621             *
622             * @og.tag ファイルを作?するとき?ファイル名をセ?します?
623             * (初期値:シス?定数のFILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])?
624             *
625             * @param   filename ファイル?
626             * @see         org.opengion.hayabusa.common.SystemData#FILE_ENCODE
627             */
628            public void setFilename( final String filename ) {
629                    this.filename = nval( getRequestParameter( filename ),this.filename );
630            }
631    
632            /**
633             * 【TAG】EXCEL雛型参?ファイル名をセ?します?
634             *
635             * @og.tag EXCEL雛型参?ファイル名をセ?します?
636             *
637             * @og.rev 3.5.4.3 (2004/01/05) 新規作?
638             *
639             * @param   filename EXCEL雛型参?ファイル?
640             */
641            public void setRefFilename( final String filename ) {
642                    refFilename = nval( getRequestParameter( filename ),refFilename );
643            }
644    
645            /**
646             * 【TAG】ファイルを作?するとき?ファイルエンコー?ング名をセ?しま?
647             *              (初期値:FILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])?
648             *
649             * @og.tag
650             * "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
651             * (初期値:シス?定数のFILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])?
652             *
653             * @og.rev 2.2.0.0 (2002/12/17) 中国?国際化)対?エンコード?取得方法変更
654             * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得する?
655             *
656             * @param   enc ファイルエンコー?ング?
657             * @see     <a href="http://www.iana.org/assignments/character-sets">IANA Charset Registry</a>
658             * @see         org.opengion.hayabusa.common.SystemData#FILE_ENCODE
659             */
660            public void setEncode( final String enc ) {
661                    encode = nval( getRequestParameter( enc ),encode );
662            }
663    
664            /**
665             * 【TAG】実際に書き?すクラス名?略称({@og.doc03Link writerClass TableWriter_**** クラスの ****})を指定しま?初期値:Default)?
666             *
667             * @og.tag
668             * 実際に書き?すクラス?の略称)をセ?します?
669             * org.opengion.hayabusa.io.TableWriter インターフェースを継承したサブクラスです?
670             * これは、org.opengion.plugin.io 以下? TableWriter_**** クラスの **** を与えます?
671             * 属?クラス定義の {@link org.opengion.hayabusa.io.TableWriter TableWriter} を参照願います?
672             * {@og.doc03Link writerClass TableWriter_**** クラス}
673             *
674             * ExcelRenderer と、Renderer は、特別な名前で、useRenderer 属?に?true" をセ?するのと同じ効果があります?
675             * 実際は、ExcelRenderer ?Excel 、Renderer  ?Default のクラスが呼ばれます?
676             *
677             * @param   writerClass クラス?の略称)
678             * @see         org.opengion.hayabusa.io.TableWriter  TableWriterのサブクラス
679             */
680            public void setWriterClass( final String writerClass ) {
681                    this.writerClass = nval( getRequestParameter( writerClass ),this.writerClass );
682            }
683    
684            /**
685             * 【TAG】追?ードで書き込?ど?[true/false]を指定しま?初期値:false[新規モード])?
686             *
687             * @og.tag DBTableModelのファイルを?追?ードで書き込?ど?をセ?します?
688             *
689             * @param   flag  [true:追?ー?それ以?新規モード]
690             */
691            public void setFileAppend( final String flag ) {
692                    fileAppend = nval( getRequestParameter( flag ),fileAppend );
693            }
694    
695            /**
696             * 【?】結果をダイレクトにEXCEL起動するかど?[true/false]を指定しま?初期値:false[ファイル])?
697             *
698             * @og.tag 結果をダイレクトに EXCEL ファイルとして出力するかど?をセ?します?
699             *
700             * @param  flag  [true:?レク?それ以?ファイル]
701             * @deprecated 結果をダイレクトするとエンコード等でおかしな動きをする可能性がある?
702             */
703            @Deprecated public void setDirect( final String flag ) {
704                    direct = nval( getRequestParameter( flag ),direct );
705            }
706    
707            /**
708             * 【TAG】結果をファイルに出力するときに、ZIPで圧縮するかど?[true/false]を指定しま?初期値:false)?
709             *
710             * @og.tag
711             * 初期値は、圧縮しな?す?
712             *
713             * @param  flag ZIPで圧縮する [true:圧縮する/それ以?しない]
714             */
715            public void setZip( final String flag ) {
716                    zip = nval( getRequestParameter( flag ),zip );
717            }
718    
719            /**
720             * 【TAG】Content-Disposition (inline:埋め込?attachment:?アログを起?を指定しま?初期値:attachment)?
721             *
722             * @og.tag
723             * Content-Disposition を指定することで、ブラウザにアプリケーション??タ?
724             * 埋め込???inline)、セー?オープンの?アログを起動する??attachment)
725             * ?します?
726             * こ?属?が有効なのは、direct="true" で、zip="false"(初期値)のとき?みです?
727             * 値は、inline 、attachment が指定できます?
728             * 初期値は、attachment です?
729             * 注意:動作検証しましたが?inline と attachment で動作に差が現れませんでした?
730             *
731             * @og.rev 3.1.5.0 (2003/04/20) Content-Disposition を外部から?できるように変更?
732             * @og.rev 3.8.0.9 (2005/10/17) Content-Disposition 初期値変更 inline ?attachment
733             *
734             * @param  pos Content-Disposition [inline/attachment]
735             */
736            public void setDisposition( final String pos ) {
737                    disposition = nval( getRequestParameter( pos ),disposition );
738                    if( !"inline".equals( disposition ) && !"attachment".equals( disposition ) ) {
739                            String errMsg = "disposition には、inline ?attachment 以外??できません?
740                                                    + "disposition=[" + disposition + "]" ;
741                            throw new HybsSystemException( errMsg );
742                    }
743            }
744    
745            /**
746             * 【TAG】EXCELファイルを書き?すとき?シート名を設定します?
747             *
748             * @og.tag
749             * EXCELファイルを書き?す時に、シート名を指定します?これにより、?の形式?
750             * 異なるデータを?次書き?した?appendモードを併用)すること??シートを?して
751             * 新規にEXCELを作?することが可能になります?
752             * 初期値は、Sheet1 です?
753             *
754             * @og.rev 3.5.4.2 (2003/12/15) 新規追?
755             *
756             * @param   sheet EXCELファイルのシート名
757             */
758            public void setSheetName( final String sheet ) {
759                    sheetName = nval( getRequestParameter( sheet ),sheetName );
760            }
761    
762            /**
763             * 【TAG】EXCEL雛型参?ファイルのシート名を設定します?
764             *
765             * @og.tag
766             * EXCELファイルを書き?す時に?型として参?するシート名を指定します?
767             * これにより、?の形式?異なるデータを?次書き?した?appendモードを併用)する
768             * こと??シートを?して新規にEXCELを作?する場合にフォー?設定する事が可能になります?
769             * 初期値は、null(第?ー? です?
770             *
771             * @og.rev 3.5.4.3 (2004/01/05) 新規追?
772             *
773             * @param   sheet EXCEL雛型参?ファイルのシート名
774             */
775            public void setRefSheetName( final String sheet ) {
776                    refSheetName = nval( getRequestParameter( sheet ),refSheetName );
777            }
778    
779            /**
780             * 【TAG】EXCEL出力時の?ォルトフォント名を設定しま?
781             *              (初期値:TABLE_WRITER_DEFAULT_FONT_NAME[={@og.value org.opengion.hayabusa.common.SystemData#TABLE_WRITER_DEFAULT_FONT_NAME}])?
782             *
783             * @og.tag
784             * これは、EXCEL追??として実?れて?す?
785             *
786             * EXCELファイルを書き?す時に、デフォルトフォント名を指定します?
787             * フォント名は、EXCELのフォント名をそのまま使用してください?
788             * ??、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontName( String )
789             * に設定されます?
790             * (初期値:シス?定数のTABLE_WRITER_DEFAULT_FONT_NAME[={@og.value org.opengion.hayabusa.common.SystemData#TABLE_WRITER_DEFAULT_FONT_NAME}])?
791             *
792             * @og.rev 3.8.5.3 (2006/08/07) 新規追?
793             *
794             * @param   name ?ォルトフォント名
795             * @see         org.opengion.hayabusa.common.SystemData#TABLE_WRITER_DEFAULT_FONT_NAME
796             */
797            public void setFontName( final String name ) {
798                    fontName = nval( getRequestParameter( name ),fontName );
799            }
800    
801            /**
802             * 【TAG】EXCEL出力時の?ォルトフォント?イント数を設定します?
803             *
804             * @og.tag
805             * これは、EXCEL追??として実?れて?す?
806             *
807             * EXCELファイルを書き?す時に、デフォルト?イント数を指定します?
808             * ??、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontHeightInPoints( short )
809             * に設定されます?
810             * 初期値は、シス?リソース の TABLE_WRITER_DEFAULT_FONT_POINTS です?
811             *
812             * @og.rev 3.8.5.3 (2006/08/07) 新規追?
813             *
814             * @param   point ?ォルトフォント?イント数
815             */
816            public void setFontPoint( final String point ) {
817                    fontPoint = nval( getRequestParameter( point ),fontPoint );
818            }
819    
820            /**
821             * 【TAG】行番号??を?出力す?しない[true/false]を指定しま?初期値:true)?
822             *
823             * @og.tag
824             * 通常のフォーマットでは、各行?先?に行番号を?力します?
825             * これは?NAME 属?を使用する場合には、?出力する?があります?
826             * (#NAME 属?は、読み取り時には、??です?)
827             * こ?、?頭の行番号が不要な場?つまり?他?シス?への??タ出力?
828             * こ?シス?では?NAME 属?が?力されな?め?読み込みできません?
829             * こ?行番号を?力しな??できます?
830             * なお?EXCEL 出力には、この設定?適用されません?暫定対?
831             * 初期値は、true(出力す? です?
832             *
833             * @og.rev 3.7.0.2 (2005/02/14) 新規追?
834             *
835             * @param   useNo 行番号??を指?[true:出力す?false:しない]
836             */
837            public void setUseNumber( final String useNo ) {
838                    useNumber = nval( getRequestParameter( useNo ),useNumber );
839            }
840    
841            /**
842             * 【TAG】書き込み先ファイルのカラ??を?外部(タグ)より?します?
843             *
844             * @og.tag
845             * こ??により、書き込?ラ?限定的に使用することが可能です?
846             * カラ?は、検索したDBTableModel上に含まれる名前で?する?があります?
847             * 別名で書き込みたい場合?、予めそ?名前で検索しておく?があります?
848             *
849             * @og.rev 4.0.0.0 (2005/12/31) 新規作?
850             *
851             * @param   clms 書き込み先ファイルのカラ??(カンマ区???
852             */
853            public void setColumns( final String clms ) {
854                    columns = nval( getRequestParameter( clms ),columns );
855            }
856    
857            /**
858             * 【TAG】書込処?コードリソースのラベル変換を行うかど?を指定しま?
859             *              (初期値:USE_TABLE_WRITER_RENDERER[={@og.value org.opengion.hayabusa.common.SystemData#USE_TABLE_WRITER_RENDERER}])?
860             *
861             * @og.tag
862             * コードリソースをそのままの値で出力すると、数字や記号になり何が書かれて?の?
863             * 不?になります?
864             * これは、コードリソースをラベルに変換して出力するかど?を指定します?
865             * 当然、コード?ユニ?クですが、ラベルはユニ?クになるかど?保障はされて?せんので
866             * TableReader 系で読み込??合には、リスクが発生します?
867             * また?TableReader 系で読み込??合にも?ラベルからコードを求める?変換を行うように?
868             * setUseRenderer メソ?で?する?があります?
869             *
870             * 従来は、TableWriter 系に、TableWriter_Renderer 系のクラスを作って対応して?したが?
871             * こ?メソ?の属?値のフラグで、制御します?
872             * (初期値:シス?定数のUSE_TABLE_WRITER_RENDERER[={@og.value org.opengion.hayabusa.common.SystemData#USE_TABLE_WRITER_RENDERER}])?
873             *
874             * @og.rev 5.2.1.0 (2010/10/01) 新規作?
875             *
876             * @param  flag コードリソースのラベル変換を行うかど?
877             * @see         org.opengion.hayabusa.common.SystemData#USE_TABLE_WRITER_RENDERER
878             */
879            public void setUseRenderer( final String flag ) {
880                    useRenderer = nval( getRequestParameter( flag ),useRenderer );
881            }
882            
883            /**
884             * 【TAG】チェ?行?みを対象にするかを?しま?初期値:true)?
885             *
886             * @og.tag
887             * falseを指定する事で、前画面でチェ?した行?みを?力します?
888             * 初期値は全ての行を出?true)です?
889             * 出力されるファイルの行番号は?から振りなおされます?
890             *
891             * @og.rev 5.5.5.5 (2012/08/24) 新規作?
892             *
893             * @param   flag 対象にするか指?[true:全件/false:対象のみ]
894             */
895            public void setSelectedAll( final String flag ) {
896                    selectedAll = nval( getRequestParameter( flag ),selectedAll );          // 5.5.9.1 (2012/12/07) バグ対?
897            }
898            
899            /**
900             * 【TAG】事前にファイルを削除するかど?を指定しま?初期値:false)?
901             *
902             * @og.tag
903             * 出力?の DBTableModel が?存在しな??件の場合?過去に作?したファイル?
904             * そ?まま、残って?と、不要なトラブルのもととなる為、実行前に削除する?
905             * ど?を指定できます?
906             * なお?fileAppend="true"?追?ードで書き込???時には、データが0件で?
907             * 事前削除は行いません?
908             * 初期値は互換性のため削除しな?false)です?
909             *
910             * @og.rev 5.5.9.1 (2012/12/07) 新規作?
911             *
912             * @param   flag 事前削除するかど? [true:削除する/false:削除しない]
913             */
914            public void setBeforeDelete( final String flag ) {
915                    beforeDelete = nval( getRequestParameter( flag ),beforeDelete );
916            }
917    
918            /**
919             * WriteTable オブジェクトに渡すパラメータオブジェクトをセ?します?
920             *
921             * @og.tag
922             * WriteTableParamTag クラスよりセ?されます?
923             *
924             * @og.rev 4.0.0.0 (2005/02/28) 新規追?
925             *
926             * @param   entry HybsEntryオブジェク?
927             */
928            protected void addParam( final HybsEntry entry ) {
929                    if( param == null ) { param = new ArrayList<HybsEntry>(); }
930                    param.add( entry );
931            }
932    
933            /**
934             * シリアライズ用のカスタ?リアライズ書き込みメソ?
935             *
936             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
937             * @serialData ?のオブジェクト?、シリアライズされません?
938             *
939             * @param       strm    ObjectOutputStreamオブジェク?
940             * @throws IOException  入出力エラーが発生した??
941             */
942            private void writeObject( final ObjectOutputStream strm ) throws IOException {
943                    strm.defaultWriteObject();
944            }
945    
946            /**
947             * シリアライズ用のカスタ?リアライズ読み込みメソ?
948             *
949             * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します?
950             *
951             * @og.rev 4.0.0.0 (2006/09/31) 新規追?
952             * @serialData ?のオブジェクト?、シリアライズされません?
953             *
954             * @param       strm    ObjectInputStreamオブジェク?
955             * @see #release2()
956             * @throws IOException  シリアライズに関する入出力エラーが発生した??
957             * @throws ClassNotFoundException       クラスを見つけることができなかった??
958             */
959            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
960                    strm.defaultReadObject();
961            }
962    
963            /**
964             * こ?オブジェクト???表現を返します?
965             * 基本???目?使用します?
966             *
967             * @return こ?クラスの??表現
968             */
969            @Override
970            public String toString() {
971                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
972                                    .println( "VERSION"                     ,VERSION                )
973                                    .println( "BASE_URL"            ,BASE_URL               )
974                                    .println( "separator"           ,separator              )
975                                    .println( "headerSequence"      ,headerSequence )
976                                    .println( "fileURL"                     ,fileURL                )
977                                    .println( "filename"            ,filename               )
978                                    .println( "refFileURL"          ,refFileURL             )
979                                    .println( "refFilename"         ,refFilename    )
980                                    .println( "encode"                      ,encode                 )
981                                    .println( "writerClass"         ,writerClass    )
982                                    .println( "fileAppend"          ,fileAppend             )
983                                    .println( "direct"                      ,direct                 )
984                                    .println( "zip"                         ,zip                    )
985                                    .println( "disposition"         ,disposition    )
986                                    .println( "tableId"                     ,tableId                )
987                                    .println( "sheetName"           ,sheetName              )
988                                    .println( "refSheetName"        ,refSheetName   )
989                                    .println( "useNumber"           ,useNumber              )
990                                    .println( "Other..."    ,getAttributes().getAttribute() )
991                                    .fixForm().toString() ;
992            }
993    }