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 */
016package org.opengion.hayabusa.taglib;
017
018import org.opengion.hayabusa.common.HybsSystem;
019import org.opengion.hayabusa.common.HybsSystemException;
020import org.opengion.hayabusa.db.DBTableModel;
021import org.opengion.hayabusa.io.TableWriter;
022import org.opengion.fukurou.util.FileUtil;
023import org.opengion.fukurou.util.HybsEntry;
024import org.opengion.fukurou.system.Closer ;
025import org.opengion.fukurou.util.StringUtil ;
026import org.opengion.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
027
028import static org.opengion.fukurou.util.StringUtil.nval ;
029
030import javax.servlet.ServletResponse ;
031import javax.servlet.http.HttpServletResponse ;
032import javax.servlet.jsp.JspWriter ;
033
034import java.util.List;
035import java.util.ArrayList;
036import java.util.Locale;
037import java.io.File;
038import java.io.OutputStream;
039import java.io.PrintWriter;
040import java.io.FileOutputStream;
041import java.io.BufferedOutputStream;                            // 6.0.4.0 (2014/11/28)
042import java.io.ByteArrayOutputStream;
043import java.io.IOException;
044import java.io.InputStream;                                                     // 6.0.4.0 (2014/11/28)
045import java.io.FileInputStream;                                         // 6.0.4.0 (2014/11/28)
046import java.io.BufferedInputStream;                                     // 6.0.4.0 (2014/11/28)
047
048import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;                       // 6.0.4.0 (2014/11/28)
049import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;        // 6.0.4.0 (2014/11/28)
050import org.apache.commons.compress.utils.IOUtils;                                                       // 6.0.4.0 (2014/11/28)
051
052/**
053 * DBTableModelオブジェクトを指定のファイルに出力するタグです。
054 *
055 * データ(DBTableModel)と、コントローラ(WriteTableTagForm)を与えて、
056 * 外部からコントロールすることで、各種形式で データ(DBTableModel)を表示できます。
057 * writeTableタグ に対して、コマンドを与えることにより、内部のコントローラの
058 * 実装に対応した、 形式でデータを作成します。
059 *
060 * @og.formSample
061 * ●形式:
062 *     <og:writeTable
063 *         fileURL   = "{@USER.ID}"    保存先ディレクトリ名
064 *         filename  = "{@filename}"   保存ファイル名
065 *         encode    = "UnicodeLittle"      保存ファイルエンコード名
066 *     />
067 *
068 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します)
069 *
070 * ●Tag定義:
071 *   <og:writeTable
072 *       writerClass        【TAG】実際に書き出すクラス名の略称(TableWriter_**** クラスの ****)を指定します
073 *                                                                      (初期値:TABLE_WRITER_DEFAULT_CLASS[={@og.value SystemData#TABLE_WRITER_DEFAULT_CLASS}])
074 *       separator          【TAG】可変長ファイルを作成するときの項目区切り文字をセットします(初期値:TableWriter#TAB_SEPARATOR[= ])
075 *       headerSequence     【TAG】DBTableModelの出力順(LNSCD など)をセットします
076 *       fileURL            【TAG】ファイル保存先ディレクトリ名を指定します(初期値:FILE_URL[={@og.value SystemData#FILE_URL}])
077 *       filename           【TAG】ファイルを作成するときのファイル名をセットします(初期値:FILE_FILENAME[={@og.value SystemData#FILE_FILENAME}])
078 *       beforeDelete       【TAG】事前にファイルを削除するかどうかをセットします (初期値:false)
079 *       encode             【TAG】ファイルを作成するときのファイルエンコーディング名をセットします(初期値:FILE_ENCODE[={@og.value SystemData#FILE_ENCODE}])
080 *       fileAppend         【TAG】追加モードで書き込むかどうか[true/false]を指定します(初期値:false[新規モード])
081 *       direct             【廃止】結果をダイレクトにEXCEL起動するかどうか[true/false]を指定します(初期値:false[ファイル])
082 *       zip                【TAG】結果をファイルに出力するときに、ZIPで圧縮するかどうか[true/false]を指定します(初期値:false)
083 *       zipFilename        【TAG】ZIPファイルを作成するときのZIPファイル名をセットします(初期値:filename + ".zip")
084 *       tableId            【TAG】(通常は使いません)sessionから所得する DBTableModelオブジェクトの ID
085 *       scope              【TAG】キャッシュする場合のスコープ[request/page/session/application]を指定します(初期値:session)
086 *       disposition        【TAG】Content-Disposition (inline:埋め込む/attachment:ダイアログを起動)を指定します(初期値:attachment)
087 *       useNumber          【TAG】行番号情報を、出力する/しない[true/false]を指定します(初期値:true)
088 *       columns            【TAG】書き込み先ファイルのカラム列を、外部(タグ)よりCSV形式で指定します
089 *       omitNames          【TAG】書き込み対象外のカラム列を、外部(タグ)よりCSV形式で指定します
090 *       useRenderer        【TAG】書込処理でコードリソースのラベル変換を行うかどうかを指定します
091 *                                      (初期値:USE_TABLE_WRITER_RENDERER[={@og.value SystemData#USE_TABLE_WRITER_RENDERER}])
092 *       selectedAll        【TAG】チェック行のみを対象にするかを指定します(初期値:true)
093 *   ※  sheetName          【TAG】EXCELファイルを書き出すときのシート名を設定します
094 *   ※  refFileURL         【TAG】EXCEL雛型参照ファイルのディレクトリ名をセットします
095 *   ※  refFilename        【TAG】EXCEL雛型参考ファイル名をセットします
096 *   ※  refSheetName       【TAG】EXCEL雛型参考ファイルのシート名を設定します
097 *   ※  sheetOverwrite     【TAG】EXCELでsheetNameでの指定シート名に対して上書きを行うかどうかを指定します。
098 *   ※  recalcSheetName    【TAG】EXCELで、出力処理の最後にセルの計算式の再計算をさせるシート名をカンマ区切りで指定します。
099 *   ※  fontName           【TAG】EXCEL出力時のデフォルトフォント名を設定します
100 *                                      (初期値:TABLE_WRITER_DEFAULT_FONT_NAME[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_NAME}])
101 *   ※  fontPoint          【TAG】EXCEL出力時のデフォルトフォントポイント数を設定します
102 *                                      (初期値:TABLE_WRITER_DEFAULT_FONT_POINTS[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_POINTS}])
103 *   ※  skipRowCount       【TAG】(通常は使いません)EXCEL出力時のデータの書き込み開始位置を設定します
104 *   ※  useCellStyle       【TAG】EXCEL出力時に、データを書き込んだ範囲に罫線を入れるかどうかを指定します(初期値:false)
105 *   ※  useAutoCellSize    【TAG】EXCEL出力時に、セルの幅をデータの幅に自動的に合わせるかどうかを指定します(初期値:false)
106 *   ※  useActiveWorkbook  【TAG】EXCEL出力時に、セルの有効範囲を設定するかどうかを指定します(初期値:false)
107 *   ※  pageBreakColumn    【TAG】EXCEL出力時に、シート変更するキーとなるカラム名を指定します(このカラムの値がシート名になります)
108 *   ※  fileBreakColumn    【TAG】EXCEL出力時に、ファイル名を変更するキーとなるカラム名を指定します(このカラムの値がファイル名になります)
109 *   ※  hyperLinkColumn    【TAG】EXCEL出力時に、Hyperlinkを作成するキーとなるカラム名と値となるカラム名を指定します
110 *   ※  addTitleSheet      【TAG】EXCEL出力時に、存在するSheet名一覧を作成する場合に、そのSheet名を指定します。
111 *       language           【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します
112 *       caseKey            【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 5.7.7.2 (2014/06/20)
113 *       caseVal            【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 5.7.7.2 (2014/06/20)
114 *       caseNN             【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
115 *       caseNull           【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
116 *       caseIf             【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない)
117 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
118 *   >   ... Body ...
119 *   </og:writeTable>
120 *
121 * ●使用例
122 *     <og:writeTable ・・・・・ >
123 *         <og:writeTableParam
124 *             key  = "Tablename"  value="GE12"
125 *         />
126 *         <og:writeTableParam
127 *             key  = "First"             First:最初に登録
128 *         >
129 *                      insert into GE12bk
130 *                         select * from GE12
131 *                         where SYSTEM_ID='**'
132 *         </og:writeTableParam
133 *         <og:writeTableParam
134 *             key  = "First"             First:の2番目に登録
135 *         >
136 *              delete from GE12 where SYSTEM_ID='**' and KBSAKU='0'
137 *         </og:writeTableParam
138 *         <og:writeTableParam
139 *             key  = "Last"              Last:最後に登録
140 *         >
141 *              update GE12 set XXXX='YYYY' where SYSTEM_ID='**' and KBSAKU='0'
142 *         </og:writeTableParam
143 *     </og:writeTableParam
144 *
145 * @og.group ファイル出力
146 *
147 * @version  4.0
148 * @author   Kazuhiko Hasegawa
149 * @since    JDK5.0,
150 */
151public class WriteTableTag extends CommonTagSupport {
152        /** このプログラムのVERSION文字列を設定します    {@value} */
153        private static final String VERSION = "6.5.0.0 (2016/09/30)" ;
154        private static final long serialVersionUID = 650020160930L ;
155
156        private final String  BASE_URL  = HybsSystem.sys( "FILE_URL" );
157
158        private String  separator               = TableWriter.TAB_SEPARATOR;     // 項目区切り文字
159        private String  headerSequence  ;                                       // ヘッダー項目の並び順
160        private String  fileURL                 = BASE_URL;
161        private String  filename                = HybsSystem.sys( "FILE_FILENAME" );   // ファイル名
162        private String  sheetName               = "Sheet1" ;            // 3.5.4.2 (2003/12/15)
163        private String  refFileURL              = BASE_URL;                     // 3.5.4.3 (2004/01/05)
164        private String  refFilename     ;                                       // 3.5.4.3 (2004/01/05)
165        private String  refSheetName    ;                                       // 3.5.4.3 (2004/01/05)
166        private String  fontName                = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_NAME" );                   // 3.8.5.3 (2006/08/07)
167        private String  fontPoint               = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_POINTS" );                 // 3.8.5.3 (2006/08/07)
168        private String  encode                  = HybsSystem.sys( "FILE_ENCODE" );      // ファイルエンコーディング  "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
169        private String  writerClass     ;                                                                                                               // 6.2.0.0 (2015/02/27) 個人設定可
170        private boolean fileAppend              ;                                       // ファイルをAPPENDモードで出力するか
171        private boolean direct                  ;
172        private boolean zip                     ;
173        private String  zipFilename             ;                                       // 6.0.4.0 (2014/11/28) Zipファイル名を外部から与えられるように修正
174        private String  disposition     = "attachment";         // 3.8.0.9 (2005/10/17) Content-Disposition 初期値変更 inline ⇒ attachment
175
176        private transient DBTableModel table ;
177        private String  tableId                 = HybsSystem.TBL_MDL_KEY ;
178        private String  directory               ;                                       // 3.8.6.0 (2006/08/23)
179
180        private transient List<HybsEntry> param ;                       // 4.0.0 (2005/02/28)
181
182        private boolean useNumber               = true;                         // 3.7.0.2 (2005/02/14)
183        // 4.0.0 (2005/12/31) 外部よりカラム列(CSV形式)を指定できるようにする。
184        private String          columns         ;
185        // 6.1.0.0 (2014/12/26) 書き込み対象外のカラム列を、外部(タグ)より指定する。
186        private String          omitNames       ;                                       // 6.1.0.0 (2014/12/26)
187
188        // 5.2.1.0 (2010/10/01) 書込処理でコードリソースのラベル変換を行うかどうか
189        private boolean useRenderer             = HybsSystem.sysBool( "USE_TABLE_WRITER_RENDERER" );    // 5.2.1.0 (2010/10/01)
190
191        // 5.5.5.5 (2012/08/24) チェック対応
192        private boolean selectedAll             = true;                         // 5.5.5.5 (2012/08/24)
193
194        // 5.5.9.1 (2012/12/07) 事前にファイルを削除するかどうか。互換性のため、false に設定。推奨は、true
195        private boolean beforeDelete    ;                                       // 5.5.9.1 (2012/12/07) 事前にファイルを削除するかどうか。
196
197        private int             skipRowCount    ;                                       // 5.7.9.0 (2014/08/08) データの書き込み開始位置設定
198
199        // 5.9.12.1 (2016/09/09)
200        private boolean sheetOverwrite;                                         // 5.9.12.1 (2016/09/09)
201        private String recalcSheetName;                                         // 5.9.12.1 (2016/09/09)
202
203        // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
204        private boolean useCellStyle            ;                       // EXCEL出力時に、データを書き込んだ範囲に罫線を入れるかどうかを指定します
205        private boolean useAutoCellSize         ;                       // EXCEL出力時に、セルの幅をデータの幅に自動的に合わせるかどうかを指定します
206        private boolean useActiveWorkbook       ;                       // EXCEL出力時に、セルの有効範囲を設定するかどうかを指定します
207        private String  pageBreakColumn         ;                       // EXCEL出力時に、シート変更するキーとなるカラム名を指定します(このカラムの値がシート名になります)
208        private String  fileBreakColumn         ;                       // EXCEL出力時に、ファイル名を変更するキーとなるカラム名を指定します(このカラムの値がファイル名になります)
209        private String  hyperLinkColumn         ;                       // EXCEL出力時に、Hyperlinkを作成するキーとなるカラム名と値となるカラム名を指定します
210        private String  addTitleSheet           ;                       // EXCEL出力時に、存在するSheet名一覧を作成する場合に、そのSheet名を指定します。
211
212        /**
213         * デフォルトコンストラクター
214         *
215         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
216         */
217        public WriteTableTag() { super(); }             // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
218
219        /**
220         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
221         *
222         * @og.rev 5.5.9.1 (2012/12/07) 事前にファイルを削除するかどうか(beforeDelete)フラグを追加
223         * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
224         * @og.rev 6.0.4.0 (2014/11/28) Zipファイル名を、内部変数化。(将来的に引数化を容易にするため)
225         *
226         * @return      後続処理の指示( EVAL_BODY_BUFFERED )
227         */
228        @Override
229        public int doStartTag() {
230                // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
231                if( !useTag() ) { return SKIP_BODY ; }
232
233                directory = HybsSystem.url2dir( fileURL );              // 5.5.9.1 (2012/12/07) doEndTag() から移動
234                if( zip && zipFilename == null ) { zipFilename = filename + ".zip"; }           // 6.0.4.0 (2014/11/28)
235
236                // 5.5.9.1 (2012/12/07) 事前にファイルを削除するかどうか
237                if( beforeDelete && !fileAppend ) {
238                        File delFile = null;
239                        if( zip ) {
240                                delFile = new File( directory,zipFilename );                            // 6.0.4.0 (2014/11/28)
241                        }
242                        else      {
243                                delFile = new File( directory,filename );
244                        }
245                        // 6.0.2.4 (2014/10/17) RV  java.io.File.delete() の例外的戻り値を無視しています。 
246                        if( delFile.exists() && !delFile.delete() ) {
247                                        final String errMsg = "事前にファイルを削除するのに失敗しました。filename=[" + delFile +"]" ;
248                                        System.err.println( errMsg );
249                        }
250                }
251
252                return EVAL_BODY_BUFFERED ;     // Body を評価する。( extends BodyTagSupport 時)
253        }
254
255        /**
256         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
257         *
258         * @og.rev 2.1.3.1 (2002/12/13) ContentType を、x-msexcel から vnd.ms-excel に変更した。
259         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
260         * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得する。
261         * @og.rev 3.1.5.0 (2003/04/20) Content-Disposition を外部から指定できるように変更。
262         * @og.rev 3.2.0.0 (2003/05/22) GZIPOutputStream を使用していたが、ZipOutputStream に変更。
263         * @og.rev 3.5.4.1 (2003/12/01) 引数の PrintWriter を、OutputStream に変更。
264         * @og.rev 3.5.4.3 (2004/01/05) 引数を、 PrintWriter に戻す。
265         * @og.rev 3.6.0.2 (2004/10/04) EXCELダイレクト出力時にファイルエンドまで出力されない不具合対策
266         * @og.rev 3.8.0.9 (2005/10/17) disposition属性を使用できるように変更します。
267         * @og.rev 3.8.6.0 (2006/08/23) フォルダがない場合は、複数階層分のフォルダを自動で作成します。
268         * @og.rev 4.3.4.3 (2008/12/22) Excel出力の判別方法を前方一致に変更
269         * @og.rev 5.1.6.0 (2010/05/01) 画面帳票作成機能対応
270         * @og.rev 5.5.2.0 (2012/05/01) ZIP時にもencodeが有効にする
271         * @og.rev 5.5.5.5 (2012/08/24) selectedAllの処理を追加
272         * @og.rev 5.5.9.1 (2012/12/07) beforeDeleteフラグの追加に伴う、ロジック変更
273         * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
274         * @og.rev 6.0.4.0 (2014/11/28) Zip処理を、ZipOutputStream → ZipArchiveOutputStream に変更
275         * @og.rev 6.2.0.0 (2015/02/27) EXCEL出力のparamLevel初期値変更 3:標準推奨 → 4:個人設定可
276         *
277         * @return      後続処理の指示
278         */
279        @Override
280        public int doEndTag() {
281                debugPrint();           // 4.0.0 (2005/02/28)
282
283                // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
284                if( !useTag() ) { return EVAL_PAGE ; }
285
286                table = (DBTableModel)getObject( tableId );
287                if( ! selectedAll ){            // 5.5.5.5 (2012/08/24) 
288                        table = getSelRowsTable( table );
289                }
290                if( table != null && table.getRowCount() > 0 ) {
291
292                        final File dir = new File( directory );
293                        if( ! dir.exists() && ! dir.mkdirs() ) {
294                                final String errMsg = "ディレクトリの作成に失敗しました。[" + directory + "]";
295                                throw new HybsSystemException( errMsg );
296                        }
297
298                        // 6.2.0.0 (2015/02/27) EXCEL出力のparamLevel初期値変更 3:標準推奨 → 4:個人設定可
299                        if( writerClass == null ) {
300                                writerClass = nval( sys( "TABLE_WRITER_DEFAULT_CLASS" ) , "Default" );          // 6.2.0.0 (2015/02/27) 個人設定可
301                        }
302
303                        PrintWriter pw = null;
304                        ByteArrayOutputStream bt = null ;
305                        try {
306                                if( direct ) {
307                                        // 6.0.4.0 (2014/11/28) 共通処理を、if( zip ) の前後でまとめます。
308                                        bt = new ByteArrayOutputStream();
309                                        pw = new PrintWriter( bt );
310                                        create( pw ) ;
311                                        pw.flush();                             // 3.6.0.2 (2004/10/04)
312                                        final ServletResponse response = pageContext.getResponse() ;
313                                        if( zip ) {
314                                                ((HttpServletResponse)response).addHeader( "Content-Encoding","gzip" );
315
316                                                final ZipArchiveOutputStream gzip = new ZipArchiveOutputStream(bt);     // 6.0.4.0 (2014/11/28)
317                                                gzip.finish() ;
318                                                response.setContentLength( bt.size() );
319
320                                                gzip.closeArchiveEntry();       // 6.0.4.0 (2014/11/28)
321                                                gzip.finish() ;                         // 6.0.4.0 (2014/11/28)
322                                                Closer.ioClose( gzip );         // 6.0.4.0 (2014/11/28)
323
324                                        }
325                                        else {
326                                                response.setContentType( "application/vnd.ms-excel; charset=" + encode );
327        //                                      response.setContentType( "application/x-msexcel; charset=" + encode );
328        //                                      response.setContentType( "text/comma-separated-values ; charset=" + encode );
329        //                                      ((HttpServletResponse)response).setHeader( "contentType","application/x-msexcel; charset=Shift_JIS" );
330        //                                      ((HttpServletResponse)response).setHeader( "Content-Disposition","attachment; filename=\"" + filename + "\"" );
331        //                                      ((HttpServletResponse)response).setHeader( "Content-Disposition","inline; filename=\"" + filename + "\"" );
332                                                // 3.8.0.9 (2005/10/17) disposition属性を使用できるように変更します。
333                                                ((HttpServletResponse)response).setHeader( "Content-Disposition",disposition + "; filename=\"" + filename + "\"" );
334
335                                        }
336                                        final JspWriter out = pageContext.getOut();
337                                        out.clear();
338                                        out.print( bt );
339                                        out.flush();                    // 3.6.0.2 (2004/10/04)
340                                }
341                                else {
342                                        final boolean isExcel =  writerClass.toUpperCase(Locale.JAPAN).startsWith("EXCEL")
343                                                                                  || writerClass.toUpperCase(Locale.JAPAN).startsWith("CALC");  // 6.0.4.0 (2014/11/28)
344
345                                        // 3.2.0.0 (2003/05/22) GZIPOutputStream を使用していたが、ZipOutputStream に変更。
346                                        if( zip ) {
347                                                InputStream is = null;                  // 6.0.4.0 (2014/11/28)
348                                                if( isExcel ) {                                 // 6.0.4.0 (2014/11/28)
349                                                        create( null );                         // 6.0.4.0 (2014/11/28)
350                                                }
351                                                else{
352                                                        bt = new ByteArrayOutputStream();
353                                                        pw = getPrintWriter( bt );      // 6.0.4.0 (2014/11/28)
354                                                        create( pw ) ;                          // 6.0.4.0 (2014/11/28)
355                                                        pw.flush();                                     // 6.0.4.0 (2014/11/28)
356                                                }
357
358                                                // 6.0.4.0 (2014/11/28) Zip処理を、ZipOutputStream → ZipArchiveOutputStream に変更
359                                                ZipArchiveOutputStream gzip = null;                     // 6.0.4.0 (2014/11/28)
360                                                try {
361                                                        gzip = new ZipArchiveOutputStream(
362                                                                                new BufferedOutputStream (
363                                                                                        new FileOutputStream (
364                                                                                                new File( directory,zipFilename ))));   // 6.0.4.0 (2014/11/28)
365                                                        gzip.setEncoding( "Windows-31J" );
366                                                        gzip.putArchiveEntry( new ZipArchiveEntry( filename ) );
367                                                        // 6.0.4.0 (2014/11/28) Excel処理とText処理が異なる。
368                                                        // bt.writeTo( gzip );
369                                                        if( isExcel ) {
370                                                                // 6.0.4.0 (2014/11/28) Excel の場合は、直接書き込むのではなく、ファイルを読み込んで Zip化する。
371                                                                final File xlsTemp = new File( directory,filename );
372                                                                is = new BufferedInputStream( new FileInputStream( xlsTemp ) );
373                                                                IOUtils.copy( is,gzip );
374                                                                Closer.ioClose( is );
375                                                                if( xlsTemp.exists() && !xlsTemp.delete() ) {
376                                                                        final String errMsg = "ExcelをZip化する時のTempファイルを削除するのに失敗しました。filename=[" + xlsTemp +"]" ;
377                                                                        System.err.println( errMsg );
378                                                                }
379                                                        }
380                                                        else {
381                                                                bt.writeTo( gzip );
382                                                        }
383                                                        gzip.closeArchiveEntry();                               // 6.0.4.0 (2014/11/28)
384                                                        gzip.finish() ;
385                                                }
386                                                finally {
387                                                        Closer.ioClose( gzip );         // 4.0.0.0 (2006/01/31) close 処理時の IOException を無視
388                                                        Closer.ioClose( is );           // 6.0.4.0 (2014/11/28) is は、null でも処理する。
389                                                }
390                                        }
391                                        else {
392                                                if( isExcel ) {                                 // 6.0.4.0 (2014/11/28)
393                                                        create( null );
394                                                }
395                                                else {
396                                                        pw = getPrintWriter();
397                                                        create( pw );
398                                                        pw.flush();                             // 3.6.0.2 (2004/10/04)
399                                                }
400                                        }
401                                }
402                        }
403                        catch( final IOException ex ) {
404                                final String errMsg = "テーブル出力時に、IOエラーが発生しました。" + toString();
405                                throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並び順変更
406                        }
407                        finally {
408                                Closer.ioClose( pw );           // 4.0.0 (2006/01/31) close 処理時の IOException を無視
409                                Closer.ioClose( bt );           // 4.0.0 (2006/01/31) close 処理時の IOException を無視
410                        }
411                }
412
413                return EVAL_PAGE ;
414        }
415
416        /**
417         * タグリブオブジェクトをリリースします。
418         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
419         *
420         * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加
421         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
422         * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得する。
423         * @og.rev 3.1.5.0 (2003/04/20) Content-Disposition を外部から指定できるように変更。
424         * @og.rev 3.5.4.2 (2003/12/15) EXCELのシート名を指定できるように変更。
425         * @og.rev 3.5.4.3 (2004/01/05) EXCEL雛型参照ファイルのURL,filenameを追加します。
426         * @og.rev 3.8.5.3 (2006/08/07) writerClass 属性の初期値をシステムリソースより取得します。
427         * @og.rev 3.8.5.3 (2006/08/07) fontName 属性を追加します。
428         * @og.rev 3.8.5.3 (2006/08/07) fontPoint 属性を追加します。
429         * @og.rev 3.8.6.0 (2006/08/23) directory 属性を追加します。
430         * @og.rev 4.0.0.0 (2005/02/28) XMLファイルにセットする、param を追加。
431         * @og.rev 5.2.1.0 (2010/10/01) 書込処理でコードリソースのラベル変換を行うかどうか useRenderer 属性追加
432         * @og.rev 5.5.5.5 (2012/08/24) selectedAll属性を追加
433         * @og.rev 5.5.9.1 (2012/12/07) 事前にファイルを削除するかどうか。互換性のため、false に設定。推奨は、true
434         * @og.rev 5.7.9.0 (2014/08/08) データの書き込み開始位置(skipRowCount)を設定
435         * @og.rev 6.0.2.0 (2014/09/19) EXCEL関係機能追加(useCellStyle,useAutoCellSize,useActiveWorkbook,
436         *                                                              pageBreakColumn,fileBreakColumn,hyperLinkColumn,addTitleSheet)
437         * @og.rev 6.0.4.0 (2014/11/28) zipFilename属性を追加。
438         * @og.rev 6.1.0.0 (2014/12/26) omitNames 属性を追加
439         * @og.rev 6.2.0.0 (2015/02/27) EXCEL出力のparamLevel初期値変更 3:標準推奨 → 4:個人設定可
440         * @og.rev 5.9.12.1 (2016/09/09) sheetOverwrite で、雛形シートの使用時に、元のシート名を使用します。
441         */
442        @Override
443        protected void release2() {
444                super.release2();
445                separator               = TableWriter.TAB_SEPARATOR;   // 項目区切り文字
446                headerSequence  = null;                         // ヘッダー項目の並び順
447                fileURL                 = BASE_URL;
448                filename                = HybsSystem.sys( "FILE_FILENAME" );   // ファイル名
449                sheetName               = "Sheet1";                     // 3.5.4.2 (2003/12/15)
450                beforeDelete    = false;                        // 5.5.9.1 (2012/12/07)
451                refFileURL              = BASE_URL;                     // 3.5.4.3 (2004/01/05)
452                refFilename     = null;                         // 3.5.4.3 (2004/01/05)
453                refSheetName    = null;                         // 3.5.4.2 (2003/12/15)
454                sheetOverwrite  = false;                        // 5.9.12.1 (2016/09/09)
455                recalcSheetName = null;                         // 5.9.12.1 (2016/09/09)
456                fontName                = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_NAME" );                   // 3.8.5.3 (2006/08/07)
457                fontPoint               = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_POINTS" );                 // 3.8.5.3 (2006/08/07)
458                encode                  = HybsSystem.sys( "FILE_ENCODE" );       // ファイルエンコーディング  "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
459                writerClass     = null;                                                                                                 // 6.2.0.0 (2015/02/27) 個人設定可
460                fileAppend              = false;                        // ファイルをAPPENDモードで出力するか
461                direct                  = false;
462                zip                     = false;
463                zipFilename             = null;                         // 6.0.4.0 (2014/11/28)
464                table                   = null;
465                tableId                 = HybsSystem.TBL_MDL_KEY ;
466                disposition     = "attachment";         // 3.8.0.9 (2005/10/17) 初期値変更 inline ⇒ attachment
467                param                   = null ;                        // 4.0.0 (2005/01/31)
468                useNumber               = true;                         // 3.7.0.2 (2005/02/14)
469                skipRowCount    = 0;                            // 5.7.9.0 (2014/08/08) データの書き込み開始位置を設定
470                directory               = null;                         // 3.8.6.0 (2006/08/23)
471                columns                 = null;                         // 4.0.0 (2005/12/31)
472                omitNames               = null;                         // 6.1.0.0 (2014/12/26)
473                useRenderer             = HybsSystem.sysBool( "USE_TABLE_WRITER_RENDERER" );    // 5.2.1.0 (2010/10/01)
474                selectedAll             = true;                         // 5.5.5.5 (2012/08/24)
475                // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
476                useCellStyle            = false;                // EXCEL出力時に、データを書き込んだ範囲に罫線を入れるかどうかを指定します
477                useAutoCellSize         = false;                // EXCEL出力時に、セルの幅をデータの幅に自動的に合わせるかどうかを指定します
478                useActiveWorkbook       = false;                // EXCEL出力時に、セルの有効範囲を設定するかどうかを指定します
479                pageBreakColumn         = null;                 // EXCEL出力時に、シート変更するキーとなるカラム名を指定します(このカラムの値がシート名になります)
480                fileBreakColumn         = null;                 // EXCEL出力時に、ファイル名を変更するキーとなるカラム名を指定します(このカラムの値がファイル名になります)
481                hyperLinkColumn         = null;                 // EXCEL出力時に、Hyperlinkを作成するキーとなるカラム名と値となるカラム名を指定します
482                addTitleSheet           = null;                 // EXCEL出力時に、存在するSheet名一覧を作成する場合に、そのSheet名を指定します。
483        }
484
485        /**
486         * TableWriter の実オブジェクトを生成して,引数のPrintWriter に書きだします。
487         *
488         * EXCEL系は、自身で出力先のOutputStreamを作成するので、引数のPrintWriterを
489         * 使わず、directory , filename から、生成します。
490         *
491         * @og.rev 3.5.4.1 (2003/12/01) 引数の PrintWriter を、OutputStream に変更。
492         * @og.rev 3.5.4.2 (2003/12/15) lang 引数も table と同時に設定します。
493         * @og.rev 3.5.4.2 (2003/12/15) TableWriter のサブクラス名変更。
494         * @og.rev 3.5.4.3 (2004/01/05) EXCEL雛型参考ファイルを指定するように変更。
495         * @og.rev 3.5.4.3 (2004/01/05) 引数を、 PrintWriter に戻す。
496         * @og.rev 3.5.4.5 (2004/01/23) 文字エンコードを渡すように変更する。
497         * @og.rev 3.5.6.0 (2004/06/18) 各種プラグイン関連付け設定を、システムパラメータ に記述します。
498         * @og.rev 3.8.5.3 (2006/08/07) EXCEL時に fontName と fontPoint 属性をセットします。
499         * @og.rev 4.0.0.0 (2005/01/31) キーの指定を、TableWriter. から、TableWriter_ に変更します。
500         * @og.rev 4.0.0.0 (2005/12/31) 外部よりカラム列(CSV形式)を指定できるようにする。
501         * @og.rev 5.2.1.0 (2010/10/01) 書込処理でコードリソースのラベル変換を行うかどうか設定 useRenderer 属性追加
502         * @og.rev 5.7.9.0 (2014/08/08) データの書き込み開始位置(skipRowCount)を設定
503         * @og.rev 6.0.2.0 (2014/09/19) EXCEL関係機能追加(useCellStyle,useAutoCellSize,useActiveWorkbook,pageBreakColumn,fileBreakColumn)
504         * @og.rev 6.0.4.0 (2014/11/28) NullPointerException が発生するので、事前にチェックします。
505         * @og.rev 6.1.0.0 (2014/12/26) デバッグ情報を出力するかどうかを指定
506         * @og.rev 6.1.0.0 (2014/12/26) omitNames 属性を追加
507         * @og.rev 6.4.2.1 (2016/02/05) HybsSystem.url2dir に引数追加。
508         * @og.rev 6.4.3.3 (2016/03/04) HybsSystem.newInstance(String,String) への置き換え。
509         * @og.rev 5.9.12.1 (2016/09/09) sheetOverwrite で、雛形シートの使用時に、元のシート名を使用します。
510         *
511         * @param   outPW 出力先のPrintWriterオブジェクト
512         */
513        private void create( final PrintWriter outPW )  {
514                // 5.2.1.0 (2010/10/01) writerClass で Renderer系の場合は、useRendererフラグに変更する。
515                if( "ExcelRenderer".equalsIgnoreCase( writerClass ) ) {
516                        writerClass = "Excel" ;
517                        useRenderer = true;
518                }
519                else if( "Renderer".equalsIgnoreCase( writerClass ) ) {
520                        writerClass = "Default" ;
521                        useRenderer = true;
522                }
523
524                final TableWriter writer = HybsSystem.newInstance( "TableWriter_" , writerClass );      // 3.5.5.3 (2004/04/09)
525
526                writer.setDBTableModel( table,getLanguage() );
527                writer.setSeparator( separator );
528                writer.setHeaderSequence( headerSequence );
529                writer.setEncode( encode );                                     // 3.5.4.5 (2004/01/23)
530                writer.setAppend( fileAppend );                         // 3.5.4.2 (2003/12/15)
531                if( param != null ) { writer.setParam( param ); }       // 4.0.0 (2005/01/31)
532                writer.setUseNumber( useNumber );                       // 3.7.0.2 (2005/02/14)
533        //      if( columns == null ) {
534        //              columns = (String)getSessionAttribute( HybsSystem.TBL_WRITER_CLMS );
535        //              removeSessionAttribute( HybsSystem.TBL_WRITER_CLMS );
536        //      }
537                writer.setColumns( columns );                           // 4.0.0 (2005/12/31)
538                writer.setOmitNames( omitNames );                       // 6.1.0.0 (2014/12/26)
539                writer.setUseRenderer( useRenderer );           // 5.2.1.0 (2010/10/01)
540                writer.setDebug( isDebug() );                           // 6.1.0.0 (2014/12/26) デバッグ情報を出力するかどうかを指定
541                if( writer.isExcel() ) {                                        // 3.5.4.3 (2004/01/05)
542                        writer.setSheetName( sheetName );
543                        writer.setFilename( directory , filename );                                     // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
544                        if( refFileURL != null && refFilename != null ) {
545                                writer.setRefFilename( HybsSystem.url2dir( refFileURL , refFilename ) );                        // 6.4.2.1 (2016/02/05) HybsSystem.url2dir に引数追加
546                        }
547                        if( refSheetName != null && refSheetName.length() > 0 ) {       // 5.7.9.0 (2014/08/08) nullチェック
548                                writer.setRefSheetName( refSheetName );
549                        }
550                        writer.setFontName( fontName )  ;                                                       // 5.7.9.0 (2014/08/08) nvalはずし
551                        if( fontPoint != null && fontPoint.length() > 0 ) {
552                                writer.setFontPoint( Short.parseShort( fontPoint ) );   // 3.8.5.3 (2006/08/07)
553                        }
554                        writer.setSkipRowCount( skipRowCount );                                         // 5.7.9.0 (2014/08/08)
555
556                        writer.setSheetOverwrite( sheetOverwrite );                                     // 5.9.12.1 (2016/09/09) 
557                        writer.setRecalcSheetName( recalcSheetName );                           // 5.9.12.1 (2016/09/09)
558
559                        writer.setUseCellStyle( useCellStyle );                                         // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
560                        writer.setUseAutoCellSize( useAutoCellSize );                           // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
561                        writer.setUseActiveWorkbook( useActiveWorkbook );                       // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
562                        writer.setPageBreakColumn( pageBreakColumn );                           // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
563                        writer.setFileBreakColumn( fileBreakColumn );                           // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
564                        writer.setHyperLinkColumn( hyperLinkColumn );                           // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
565                        writer.setAddTitleSheet( addTitleSheet );                                       // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
566
567                        writer.writeDBTable();
568                }
569                else {
570                        writer.writeDBTable( outPW );
571                }
572        }
573
574        /**
575         * PrintWriter を取得します。
576         *
577         * ここでは、一般的なファイル出力を考慮した PrintWriter を作成します。
578         *
579         * @og.rev 2.2.0.0 (2002/12/17) 中国語(国際化)対応 エンコードの取得方法変更
580         * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得する。
581         * @og.rev 3.5.4.1 (2003/12/01) PrintWriter を、OutputStream に変更。
582         * @og.rev 3.5.5.9 (2004/06/07) FileUtil.getBufferedReader を使用
583         * @og.rev 3.7.1.1 (2005/05/23) フォルダがない場合は、複数階層分のフォルダを自動で作成します。
584         * @og.rev 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用。
585         *
586         * @return      ファイル書き出し用のPrintWriterオブジェクト
587         */
588        private PrintWriter getPrintWriter() {
589                if( filename == null ) {
590                        final String errMsg = "ファイル名がセットされていません。";
591                        throw new HybsSystemException( errMsg );
592                }
593
594                // 6.4.1.1 (2016/01/16) ワンクッションいれずに return します。
595                return FileUtil.getPrintWriter( new File( directory,filename ),encode,fileAppend );
596
597        }
598
599        /**
600         * PrintWriter を取得します。
601         *
602         * 引数で指定したOutputStreamを利用して出力します。
603         *
604         * @og.rev 5.5.2.0 (2012/05/01) 新規作成
605         *
606         * @param       os      OutputStreamオブジェクト
607         *
608         * @return      指定したstreamに書き出すPrintWriter
609         */
610        private PrintWriter getPrintWriter( final OutputStream os ) {
611                // 6.4.1.1 (2016/01/16) ワンクッションいれずに return します。
612                return FileUtil.getPrintWriter( os,encode );
613
614        }
615
616        /**
617         * チェック分のテーブルモデルを再構成します。
618         *
619         * @og.rev 5.5.5.5 (2012/08/24) 新規作成
620         * @og.rev 5.5.9.1 (2012/12/07) 内部処理変更
621         *
622         * @param       oldTable        コピー元テーブルモデル
623         *
624         * @return      チェックした分だけで再構成したテーブルモデル
625         */
626        private DBTableModel getSelRowsTable( final DBTableModel oldTable ) {
627                if( oldTable == null ) { return null; }         // 5.5.9.1 (2012/12/07) 引数のDBTableModelが null の場合の処理。
628
629                final DBTableModel newTable = oldTable.newModel();
630                final int[] rowNo = getParameterRows();
631                final int rowCount = rowNo.length ;
632
633                for( int i=0; i<rowCount; i++ ) {
634                        newTable.addValues( oldTable.getValues(rowNo[i]), i );
635                }
636                return newTable;
637        }
638
639        /**
640         * 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します
641         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
642         *
643         * @og.tag
644         * 検索結果より、DBTableModelオブジェクトを作成します。これを、下流のviewタグ等に
645         * 渡す場合に、通常は、session を利用します。その場合の登録キーです。
646         * query タグを同時に実行して、結果を求める場合、同一メモリに配置される為、
647         * この tableId 属性を利用して、メモリ空間を分けます。
648         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
649         *
650         * @param       id テーブルID (sessionに登録する時のID)
651         */
652        public void setTableId( final String id ) {
653                tableId = nval( getRequestParameter( id ), tableId );
654        }
655
656        /**
657         * 【TAG】可変長ファイルを作成するときの項目区切り文字をセットします
658         *              (初期値:TableWriter#TAB_SEPARATOR[={@og.value TableWriter#TAB_SEPARATOR}])。
659         *
660         * @og.tag 可変長ファイルを作成するときの項目区切り文字をセットします。
661         * (初期値:TableWriter#TAB_SEPARATOR[={@og.value TableWriter#TAB_SEPARATOR}])。
662         *
663         * @param   separator 項目区切り文字
664         * @see         org.opengion.hayabusa.io.TableWriter#TAB_SEPARATOR
665         */
666        public void setSeparator( final String separator ) {
667                this.separator = nval( getRequestParameter( separator ),this.separator );
668        }
669
670        /**
671         * 【TAG】DBTableModelの出力順(LNSCD など)をセットします。
672         *
673         * @og.tag
674         * Label,Name,Size,Class,Data の各フィールドの頭文字のアルファベットで
675         * 出力順を設定します。
676         *
677         * @param   hs 出力順 (LNSCD など)
678         */
679        public void setHeaderSequence( final String hs ) {
680                final String[] headers = getRequestParameterValues( hs );
681                if( headers != null ) {
682                        final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE );
683                        for( int i=0; i<headers.length; i++ ) {
684                                if( headers[i] != null ) { buf.append( headers[i] ); }
685                        }
686                        headerSequence = buf.toString();
687                }
688        }
689
690        /**
691         * 【TAG】ファイル保存先ディレクトリ名を指定します
692         *              (初期値:FILE_URL[={@og.value SystemData#FILE_URL}])。
693         *
694         * @og.tag
695         * この属性で指定されるディレクトリに、ファイルをセーブします。
696         * 指定方法は、通常の fileURL 属性と同様に、先頭が、'/' (UNIX) または、2文字目が、
697         * ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、
698         * システムパラメータ の FILE_URL 属性で指定のフォルダの下に、作成されます。
699         * fileURL = "{&#064;USER.ID}" と指定すると、FILE_URL 属性で指定のフォルダの下に、
700         * さらに、各個人ID別のフォルダを作成して、そこにセーブします。
701         *
702         * @og.rev 3.5.4.3 (2004/01/05) 内部処理を、makeFileURL に移動。
703         * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソッドの利用
704         * @og.rev 4.0.0.0 (2007/11/20) 指定されたディレクトリ名の最後が"\"or"/"で終わっていない場合に、"/"を付加する。
705         * @og.rev 6.4.2.1 (2016/02/05) URLの最後に、"/" を追加する処理を廃止。
706         *
707         * @param       url 保存先ディレクトリ名
708         */
709        public void setFileURL( final String url ) {
710                final String furl = nval( getRequestParameter( url ),null );
711                if( furl != null ) {
712                        fileURL = StringUtil.urlAppend( fileURL,furl );
713                }
714        }
715
716        /**
717         * 【TAG】ファイルを作成するときのファイル名をセットします
718         *              (初期値:FILE_FILENAME[={@og.value SystemData#FILE_FILENAME}])。
719         *
720         * @og.tag ファイルを作成するときのファイル名をセットします。
721         * (初期値:システム定数のFILE_ENCODE[={@og.value SystemData#FILE_FILENAME}])。
722         *
723         * @param   filename ファイル名
724         * @see         org.opengion.hayabusa.common.SystemData#FILE_FILENAME
725         */
726        public void setFilename( final String filename ) {
727                this.filename = nval( getRequestParameter( filename ),this.filename );
728        }
729
730        /**
731         * 【TAG】EXCELファイルを書き出すときのシート名を設定します(初期値:Sheet1)。
732         *
733         * @og.tag
734         * EXCELファイルを書き出す時に、シート名を指定します。これにより、複数の形式の
735         * 異なるデータを順次書き出したり(appendモードを併用)することや、シートを指定して
736         * 新規にEXCELを作成することが可能になります。
737         * 初期値は、Sheet1 です。
738         *
739         * @og.rev 3.5.4.2 (2003/12/15) 新規追加
740         *
741         * @param   sheet シート名
742         */
743        public void setSheetName( final String sheet ) {
744                sheetName = nval( getRequestParameter( sheet ),sheetName );
745        }
746
747        /**
748         * 【TAG】ファイルを作成するときのファイルエンコーディング名をセットします
749         *              (初期値:FILE_ENCODE[={@og.value SystemData#FILE_ENCODE}])。
750         *
751         * @og.tag
752         * "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
753         * (初期値:システム定数のFILE_ENCODE[={@og.value SystemData#FILE_ENCODE}])。
754         *
755         * @og.rev 2.2.0.0 (2002/12/17) 中国語(国際化)対応 エンコードの取得方法変更
756         * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得する。
757         *
758         * @param   enc エンコーディング名 (例:DEFAULT,JISAutoDetect,JIS,EUC_JP,MS932,SJIS,Windows-31J,Shift_JIS)
759         * @see     <a href="http://www.iana.org/assignments/character-sets">IANA Charset Registry</a>
760         * @see         org.opengion.hayabusa.common.SystemData#FILE_ENCODE
761         */
762        public void setEncode( final String enc ) {
763                encode = nval( getRequestParameter( enc ),encode );
764        }
765
766        /**
767         * 【TAG】実際に書き出すクラス名の略称({@og.doc03Link writerClass TableWriter_**** クラスの ****})を指定します
768         *              (初期値:TABLE_WRITER_DEFAULT_CLASS[={@og.value SystemData#TABLE_WRITER_DEFAULT_CLASS}])。
769         *
770         * @og.tag
771         * 実際に書き出すクラス名(の略称)をセットします。
772         * org.opengion.hayabusa.io.TableWriter インターフェースを継承したサブクラスです。
773         * これは、org.opengion.plugin.io 以下の TableWriter_**** クラスの **** を与えます。
774         * 属性クラス定義の {@link org.opengion.hayabusa.io.TableWriter TableWriter} を参照願います。
775         * {@og.doc03Link writerClass TableWriter_**** クラス}
776         *
777         * ExcelRenderer と、Renderer は、特別な名前で、useRenderer 属性に、"true" をセットするのと同じ効果があります。
778         * 実際は、ExcelRenderer ⇒ Excel 、Renderer  ⇒ Default のクラスが呼ばれます。
779         * (初期値:TABLE_WRITER_DEFAULT_CLASS[={@og.value SystemData#TABLE_WRITER_DEFAULT_CLASS}])。
780         *
781         * @param   writerClass クラス名(の略称)
782         * @see         org.opengion.hayabusa.io.TableWriter  TableWriterのサブクラス
783         */
784        public void setWriterClass( final String writerClass ) {
785                this.writerClass = nval( getRequestParameter( writerClass ),this.writerClass );
786        }
787
788        /**
789         * 【TAG】追加モードで書き込むかどうか[true/false]を指定します(初期値:false[新規モード])。
790         *
791         * @og.tag DBTableModelのファイルを、追加モードで書き込むかどうかをセットします。
792         *
793         * @param   flag 追加モードか [true:追加モード/それ以外:新規モード]
794         */
795        public void setFileAppend( final String flag ) {
796                fileAppend = nval( getRequestParameter( flag ),fileAppend );
797        }
798
799        /**
800         * 【廃止】結果をダイレクトにEXCEL起動するかどうか[true/false]を指定します(初期値:false[ファイル])。
801         *
802         * @og.tag 結果をダイレクトに EXCEL ファイルとして出力するかどうかをセットします。
803         *
804         * @param  flag ダイレクト起動か [true:ダイレクト/それ以外:ファイル]
805         * @deprecated 結果をダイレクトするとエンコード等でおかしな動きをする可能性がある。
806         */
807        @Deprecated public void setDirect( final String flag ) {
808                direct = nval( getRequestParameter( flag ),direct );
809        }
810
811        /**
812         * 【TAG】結果をファイルに出力するときに、ZIPで圧縮するかどうか[true/false]を指定します(初期値:false)。
813         *
814         * @og.tag
815         * 初期値は、圧縮しないです。
816         *
817         * @param  flag ZIPで圧縮する [true:圧縮する/それ以外:しない]
818         */
819        public void setZip( final String flag ) {
820                zip = nval( getRequestParameter( flag ),zip );
821        }
822
823        /**
824         * 【TAG】ZIPファイルを作成するときのZIPファイル名をセットします(初期値:filename + ".zip")。
825         *
826         * @og.tag
827         * zip 属性に、true を指定した場合に、ZIPファイル化します。その場合のファイル名を指定します。
828         * なにも指定しない場合は、filename + ".zip" になります。
829         *
830         * @og.rev 6.0.4.0 (2014/11/28) Zipファイル名を外部から与えられるように修正
831         *
832         * @param   zipFile ZIPファイル名
833         * @see #setZip( String )
834         */
835        public void setZipFilename( final String zipFile ) {
836                zipFilename = nval( getRequestParameter( zipFile ),zipFilename );
837        }
838
839        /**
840         * 【TAG】Content-Disposition [inline:埋め込む/attachment:ダイアログを起動]を指定します(初期値:attachment)。
841         *
842         * @og.tag
843         * Content-Disposition を指定することで、ブラウザにアプリケーションデータを
844         * 埋め込むのか(inline)、セーブ/オープンのダイアログを起動するのか(attachment)
845         * 指定します。
846         * この属性が有効なのは、direct="true" で、zip="false"(初期値)のときのみです。
847         * 値は、inline 、attachment が指定できます。
848         * 初期値は、attachment です。
849         * 注意:動作検証しましたが、inline と attachment で動作に差が現れませんでした。
850         *
851         * @og.rev 3.1.5.0 (2003/04/20) Content-Disposition を外部から指定できるように変更。
852         * @og.rev 3.8.0.9 (2005/10/17) Content-Disposition 初期値変更 inline ⇒ attachment
853         *
854         * @param  pos 埋め込みするかどうか [inline:埋め込む/attachment:ダイアログを起動]
855         */
856        public void setDisposition( final String pos ) {
857                disposition = nval( getRequestParameter( pos ),disposition );
858                if( !"inline".equals( disposition ) && !"attachment".equals( disposition ) ) {
859                        final String errMsg = "disposition には、inline か attachment 以外は指定できません。"
860                                                + "disposition=[" + disposition + "]" ;
861                        throw new HybsSystemException( errMsg );
862                }
863        }
864
865        /**
866         * 【TAG】EXCEL雛型参照ファイルのディレクトリ名をセットします
867         *              (初期値:FILE_URL[={@og.value SystemData#FILE_URL}])。
868         *
869         * @og.tag
870         * この属性で指定されるディレクトリに、ファイルをセーブします。
871         * 指定方法は、通常の fileURL 属性と同様に、先頭が、'/' (UNIX) または、2文字目が、
872         * ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、
873         * システムパラメータ の FILE_URL 属性で指定のフォルダの下に、作成されます。
874         * fileURL = "{&#064;USER.ID}" と指定すると、FILE_URL 属性で指定のフォルダの下に、
875         * さらに、各個人ID別のフォルダを作成して、そこにセーブします。
876         *
877         * @og.rev 3.5.4.3 (2004/01/05) 新規作成
878         * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソッドの利用
879         * @og.rev 4.0.0.0 (2007/11/20) 指定されたディレクトリ名の最後が"\"or"/"で終わっていない場合に、"/"を付加する。
880         * @og.rev 6.4.2.1 (2016/02/05) URLの最後に、"/" を追加する処理を廃止。
881         *
882         * @param       url 雛型ディレクトリ名
883         */
884        public void setRefFileURL( final String url ) {
885                final String furl = nval( getRequestParameter( url ),null );
886                if( furl != null ) {
887                        refFileURL = StringUtil.urlAppend( refFileURL,furl );
888                }
889        }
890
891        /**
892         * 【TAG】EXCEL雛型参考ファイル名をセットします。
893         *
894         * @og.tag
895         * 内部処理的には、雛形ファイルの雛形シートをメモリ上に構築し、
896         * そのシートのセルに、データを追加していきます。
897         * 最後には、雛形シートとして存在しない部分は、すべて削除します。
898         * 雛形シートを使わない場合は、新規シートに追加していくことになります。
899         * appendモードの場合は、オリジナルが雛形ファイルになります。
900         * 雛形ファイルの指定は、無効になります。
901         * ※ 互換性の為、同じ名前の設定は有効です。
902         *
903         * ※ Excel2007形式(XSSF)では、行全体を指定した色や罫線は、
904         * セルとして認識されません。範囲指定で、罫線や色付けを行う必要があります。
905         *
906         * @og.rev 3.5.4.3 (2004/01/05) 新規作成
907         *
908         * @param   filename 雛型ファイル名
909         */
910        public void setRefFilename( final String filename ) {
911                refFilename = nval( getRequestParameter( filename ),refFilename );
912        }
913
914        /**
915         * 【TAG】EXCEL雛型参考ファイルのシート名を設定します。
916         *
917         * @og.tag
918         * EXCELファイルを書き出す時に、雛型として参照するシート名を指定します。
919         * これにより、複数の形式の異なるデータを順次書き出したり(appendモードを併用)する
920         * ことや、シートを指定して新規にEXCELを作成する場合にフォームを設定する事が可能になります。
921         * 初期値は、null(第一シート) です。
922         *
923         * @og.rev 3.5.4.3 (2004/01/05) 新規追加
924         *
925         * @param   sheet 雛型シート名
926         */
927        public void setRefSheetName( final String sheet ) {
928                refSheetName = nval( getRequestParameter( sheet ),refSheetName );
929        }
930
931        /**
932         * 【TAG】雛形のシート名を、そのまま使用する(true)か、新規、または、外部指定のシート名を使用する(false)を指定します。(初期値:false[外部指定のシート名を使用])。
933         *
934         * @og.tag
935         * ※ Ver5では、追記モード時に、指定シートが存在した場合は上書きします(初期値:false[上書きしない])。5.9.12.1 (2016/09/09)
936         *    Ver6では、追記モード時に、雛形を指定できないため、雛形のシート名を、そのまま使用する(true)か、
937         *    新規、または、外部指定のシート名を使用する(false)を指定する属性になります。
938         * 
939         * @og.rev 6.5.0.0 (2016/09/30) sheetOverwrite で、雛形シートの使用時に、元のシート名を使用します。
940         *
941         * @param   flag 元のシート名を使用するかどうか [true:使用する/false:新規、または、外部指定のシート名を使用]
942         */
943        public void setSheetOverwrite( final String flag ) {
944                sheetOverwrite = nval( getRequestParameter( flag ),sheetOverwrite );
945        }
946
947        /**
948         * 【TAG】EXCELで、出力処理の最後に、セル内の計算式を再計算させるシート名をカンマ区切りで指定します。
949         *
950         * @og.tag
951         * 通常は利用する必要はありません。
952         * 一覧結果を利用した集計用シートを別に持っているような雛形を利用した出力で利用します。
953         *
954         * @og.rev 6.5.0.0 (2016/09/30) recalcSheetName で、セル内の計算式を再計算させるシート名を指定。5.9.12.1 (2016/09/09)
955         *
956         * @param   sheet 対象シート名(カンマ区切り文字)
957         */
958        public void setRecalcSheetName( final String sheet ) {
959                recalcSheetName = nval( getRequestParameter( sheet ),recalcSheetName );
960        }
961
962        /**
963         * 【TAG】EXCEL出力時のデフォルトフォント名を設定します
964         *              (初期値:TABLE_WRITER_DEFAULT_FONT_NAME[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_NAME}])。
965         *
966         * @og.tag
967         * これは、EXCEL追加機能として実装されています。
968         *
969         * EXCELファイルを書き出す時に、デフォルトフォント名を指定します。
970         * フォント名は、EXCELのフォント名をそのまま使用してください。
971         * 内部的に、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontName( String )
972         * に設定されます。
973         * (初期値:システム定数のTABLE_WRITER_DEFAULT_FONT_NAME[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_NAME}])。
974         *
975         * @og.rev 3.8.5.3 (2006/08/07) 新規追加
976         *
977         * @param   name デフォルトフォント名
978         * @see         org.opengion.hayabusa.common.SystemData#TABLE_WRITER_DEFAULT_FONT_NAME
979         */
980        public void setFontName( final String name ) {
981                fontName = nval( getRequestParameter( name ),fontName );
982        }
983
984        /**
985         * 【TAG】EXCEL出力時のデフォルトフォントポイント数を設定します
986         *              (初期値:TABLE_WRITER_DEFAULT_FONT_POINTS[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_POINTS}])。
987         *
988         * @og.tag
989         * これは、EXCEL追加機能として実装されています。
990         *
991         * EXCELファイルを書き出す時に、デフォルトポイント数を指定します。
992         * 内部的に、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontHeightInPoints( short )
993         * に設定されます。
994         * (初期値:システム定数のTABLE_WRITER_DEFAULT_FONT_POINTS[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_POINTS}])。
995         *
996         * @og.rev 3.8.5.3 (2006/08/07) 新規追加
997         *
998         * @param   point フォントポイント数
999         * @see         org.opengion.hayabusa.common.SystemData#TABLE_WRITER_DEFAULT_FONT_POINTS
1000         */
1001        public void setFontPoint( final String point ) {
1002                fontPoint = nval( getRequestParameter( point ),fontPoint );
1003        }
1004
1005        /**
1006         * 【TAG】ファイル出力時に、行番号情報を、出力する/しない[true/false]を指定します(初期値:true)。
1007         *
1008         * @og.tag
1009         * 通常のフォーマットでは、各行の先頭に行番号を出力します。
1010         * これは、#NAME 属性を使用する場合には、必ず出力する必要があります。
1011         * (#NAME 属性は、読み取り時にあれば、自動的にカラムに割り当てられます。)
1012         * この、先頭の行番号が不要な場合(つまり、他のシステムへのデータ出力等)
1013         * の為に出力する場合に、false を設定することで、行番号列を出力しない
1014         * ようにできます。
1015         * 初期値は、true(出力する) です。
1016         *
1017         * @og.rev 3.7.0.2 (2005/02/14) 新規追加
1018         *
1019         * @param   useNo 行番号情報 [true:出力する/false:しない]
1020         */
1021        public void setUseNumber( final String useNo ) {
1022                useNumber = nval( getRequestParameter( useNo ),useNumber );
1023        }
1024
1025        /**
1026         * 【TAG】書き込み先ファイルのカラム列を、外部(タグ)よりCSV形式で指定します。
1027         *
1028         * @og.tag
1029         * この指定により、書き込むカラムを限定的に使用することが可能です。
1030         * カラム名は、検索したDBTableModel上に含まれる名前で指定する必要があります。
1031         * 別名で書き込みたい場合は、予めその名前で検索しておく必要があります。
1032         * カラム名を指定しない場合(例えば ,,, など)は、カラムを書き飛ばします。
1033         *
1034         * @og.rev 4.0.0.0 (2005/12/31) 新規作成
1035         *
1036         * @param   clms 書込カラム列 (CSV形式)
1037         */
1038        public void setColumns( final String clms ) {
1039                columns = nval( getRequestParameter( clms ),columns );
1040        }
1041
1042        /**
1043         * 【TAG】書き込み対象外のカラム列を、外部(タグ)よりCSV形式で指定します。
1044         *
1045         * @og.tag
1046         * 指定するカラム名に対して、書き込み処理を行いません。
1047         * ここで指定するカラム名は、検索したDBTableModel上に含まれる必要はありません。
1048         * その場合は、ここでの指定は無視されます。
1049         *
1050         * @og.rev 6.1.0.0 (2014/12/26) omitNames 属性を追加
1051         *
1052         * @param   clms 書込対象外カラム列 (CSV形式)
1053         */
1054        public void setOmitNames( final String clms ) {
1055                omitNames = nval( getRequestParameter( clms ),omitNames );
1056        }
1057
1058        /**
1059         * 【TAG】書込処理でコードリソースのラベル変換を行うかどうかを指定します
1060         *              (初期値:USE_TABLE_WRITER_RENDERER[={@og.value SystemData#USE_TABLE_WRITER_RENDERER}])。
1061         *
1062         * @og.tag
1063         * コードリソースをそのままの値で出力すると、数字や記号になり何が書かれているのか
1064         * 不明になります。
1065         * これは、コードリソースをラベルに変換して出力するかどうかを指定します。
1066         * 当然、コードはユニークですが、ラベルはユニークになるかどうか保障はされていませんので
1067         * TableReader 系で読み込む場合には、リスクが発生します。
1068         * また、TableReader 系で読み込む場合にも、ラベルからコードを求める逆変換を行うように、
1069         * setUseRenderer メソッドで指定する必要があります。
1070         *
1071         * 従来は、TableWriter 系に、TableWriter_Renderer 系のクラスを作って対応していましたが、
1072         * このメソッドの属性値のフラグで、制御します。
1073         * (初期値:システム定数のUSE_TABLE_WRITER_RENDERER[={@og.value SystemData#USE_TABLE_WRITER_RENDERER}])。
1074         *
1075         * @og.rev 5.2.1.0 (2010/10/01) 新規作成
1076         *
1077         * @param  flag ラベル変換可否 [true:する/false:しない]
1078         * @see         org.opengion.hayabusa.common.SystemData#USE_TABLE_WRITER_RENDERER
1079         */
1080        public void setUseRenderer( final String flag ) {
1081                useRenderer = nval( getRequestParameter( flag ),useRenderer );
1082        }
1083
1084        /**
1085         * 【TAG】(通常は使いません)EXCEL出力時のデータの書き込み開始行番号を設定します(初期値:0)。
1086         *
1087         * @og.tag
1088         * EXCELのデータの書き込みの開始行番号を指定します。
1089         * 属性名は、行を飛ばす処理ということで、readTable タグと同じ名称です。
1090         * ファイルの先頭行が、0行としてカウントしますので、設定値は、読み飛ばす
1091         * 件数になります。(1と指定すると、1行読み飛ばし、2行目から読み込みます。)
1092         * 行の読み飛ばしと、カラムの読み飛ばし(columns)、refFileURL、refFilename、
1093         * refSheetName とともに使用すれば、ある程度のレイアウト設定が可能です。
1094         * 現時点では、Excel の場合のみ有効です。
1095         *
1096         * @og.rev 5.7.9.0 (2014/08/08) 新規作成
1097         *
1098         * @param       count 書き込み開始行番号
1099         */
1100        public void setSkipRowCount( final String count ) {
1101                skipRowCount = nval( getRequestParameter( count ),skipRowCount );
1102        }
1103
1104        /**
1105         * 【TAG】EXCEL出力時に、データを書き込んだ範囲に罫線を入れるかどうかを指定します(初期値:false)。
1106         *
1107         * @og.tag
1108         * データを書き込んでEXCELを作成しても、ノーマルのセルに値がセットされている
1109         * だけなので、ある程度加工が必要です。
1110         * そこで、データのセットされたセルに罫線を入れることで、それなりのデータが
1111         * 出力された感じになります。
1112         * この設定と、useAutoCellSize="true" で、セルの幅を自動調整すれば、見栄えが良くなります。
1113         * なお、この機能は、TableWriter_Excel のみに実装します。
1114         *
1115         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
1116         *
1117         * @param       useStyle 罫線追記 [true:する/false:しない]
1118         * @see         #setUseAutoCellSize( String )
1119         */
1120        public void setUseCellStyle( final String useStyle ) {
1121                useCellStyle = nval( getRequestParameter( useStyle ),useCellStyle );
1122        }
1123
1124        /**
1125         * 【TAG】EXCEL出力時に、セルの幅をデータの幅に自動的に合わせるかどうかを指定します(初期値:false)。
1126         *
1127         * @og.tag
1128         * データを書き込んでEXCELを作成しても、ノーマルのセルに値がセットされている
1129         * だけなので、ある程度加工が必要です。
1130         * そこで、データのセットされたセルの幅を自動調整することで、それなりのデータが
1131         * 出力された感じになります。
1132         * この設定と、useCellStyle="true" で、セルの罫線を自動設定すれば、見栄えが良くなります。
1133         * なお、この機能は、TableWriter_Excel のみに実装します。
1134         *
1135         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
1136         *
1137         * @param       useAutoSize 幅の自動的調整 [true:する/false:しない]
1138         * @see         #setUseCellStyle( String )
1139         */
1140        public void setUseAutoCellSize( final String useAutoSize ) {
1141                useAutoCellSize = nval( getRequestParameter( useAutoSize ),useAutoCellSize );
1142        }
1143
1144        /**
1145         * 【TAG】EXCEL出力時に、セルの有効範囲を設定するかどうかを指定します(初期値:false)。
1146         *
1147         * @og.tag
1148         * セルの有効範囲というのは、EXCELでの 空行、空列の存在しない範囲を指します(初期値:false)。
1149         * 通常、空行でも、データとして残っている場合は、EXCELのセルオブジェクトは存在します。
1150         * ここで、useActiveWorkbook="true" とすると、空行、空列を削除します。
1151         * 
1152         * 雛形を使用した場合は、データより多めに設定した計算などは、この処理で
1153         * 削除されますので、データサイズにフィットさせることができます。
1154         * なお、この機能は、TableWriter_Excel のみに実装します。
1155         *
1156         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
1157         *
1158         * @param       useActWB 有効範囲の設定 [true:する/false:しない]
1159         */
1160        public void setUseActiveWorkbook( final String useActWB ) {
1161                useActiveWorkbook = nval( getRequestParameter( useActWB ),useActiveWorkbook );
1162        }
1163
1164        /**
1165         * 【TAG】EXCEL出力時に、シート変更するキーとなるカラム名を指定します(このカラムの値がシート名になります)。
1166         *
1167         * @og.tag
1168         * EXCEL帳票では、帳票雛形に、PAGE_BRAKE キーを設定しましたが、TableWriterでは、
1169         * メモリ上のカラムの値が変更したときに、シート変更させることができます。
1170         * このカラムの値がキーブレイクすると、新しいシートに書き出し始めます。
1171         * シート名は、このカラムの値(キーブレイクする値)です。
1172         * 
1173         * 雛形ファイルを使用する場合、雛形シートもキーブレイクに伴って、+1されます。
1174         * つまり、雛形シートとデータシートは同時に変更されます。
1175         * ただし、雛形シートは、最後の雛形シートで止まります。
1176         * これは、雛形シートにヘッダー雛形とボディ雛形を用意しておき、最初のキーブレイクで
1177         * ヘッダーからボディの書き込みにチェンジするイメージで使用できます。
1178         * なお、この機能は、TableWriter_Excel のみに実装します。
1179         *
1180         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
1181         *
1182         * @param       pbColumn シート変更カラム名
1183         * @see         #setFileBreakColumn( String )
1184         */
1185        public void setPageBreakColumn( final String pbColumn ) {
1186                pageBreakColumn = nval( getRequestParameter( pbColumn ),pageBreakColumn );
1187        }
1188
1189        /**
1190         * 【TAG】EXCEL出力時に、ファイル名を変更するキーとなるカラム名を指定します(このカラムの値がファイル名になります)。
1191         *
1192         * @og.tag
1193         * EXCEL帳票では、メモリ上のカラムの値が変更したときに、ファイル名を変更することができます。
1194         * このカラムの値がキーブレイクすると、新しいファイルに書き出し始めます。
1195         * ファイル名は、このカラムの値(キーブレイクする値)+ 元の出力ファイル名の拡張子(.xlsなど)です。
1196         * この設定を使用する場合は、出力ファイル名は無視されますが、拡張子だけは使用されます。
1197         * 
1198         * 雛形ファイルを使用する場合、雛形ファイルもキーブレイクに伴って、再利用されます。
1199         * 例えば、pageBreakColumn と併用する場合、キーブレイクで雛形シートも最初から適用になります。
1200         * なお、この機能は、TableWriter_Excel のみに実装します。
1201         *
1202         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
1203         *
1204         * @param       fbColumn ファイルブレイクカラム
1205         * @see         #setPageBreakColumn( String )
1206         */
1207        public void setFileBreakColumn( final String fbColumn ) {
1208                fileBreakColumn = nval( getRequestParameter( fbColumn ),fileBreakColumn );
1209        }
1210
1211        /**
1212         * 【TAG】EXCEL出力時に、Hyperlinkを作成するキーとなる「カラム名:値」形式のカラム名を指定します。
1213         *
1214         * @og.tag
1215         * ここで、作成するハイパーリンクは、EXCELのシートに対するハイパーリンクです。
1216         * それ以外のリンク(本当のURLやファイル等)のリンクは(今は)作成できません。
1217         * ハイパーリンクを作成するには、①作成するカラム と ②作成する値 が必要です。
1218         * このメソッドで設定するのは、「①:②」という形式でカラム名を指定します。
1219         * ②がなければ、①と同じとします。
1220         * ②の値のシートの存在有無は、無視します。ハイパーリンクを作成するシートを作成する前に
1221         * ハイパーリンクを作成するケースが存在します。
1222         * (例えば、各シートへのリンクを持った一覧を作成してから、明細の各シートを作成する様なケース)
1223         * なお、この機能は、TableWriter_Excel のみに実装します。
1224         *
1225         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
1226         *
1227         * @param       hlColumn リンク作成カラム名 (「カラム名:値」形式)
1228         */
1229        public void setHyperLinkColumn( final String hlColumn ) {
1230                hyperLinkColumn = nval( getRequestParameter( hlColumn ),hyperLinkColumn );
1231        }
1232
1233        /**
1234         * 【TAG】EXCEL出力時に、Sheet一覧を作成する場合のSheet名を指定します。
1235         *
1236         * @og.tag
1237         * これは、Workbook に含まれる Sheet 一覧を作成する場合に、利用可能です。
1238         * なお、この機能は、TableWriter_Excel のみに実装します。
1239         *
1240         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
1241         *
1242         * @param       sheetName タイトルシート名
1243         */
1244        public void setAddTitleSheet( final String sheetName ) {
1245                addTitleSheet = nval( getRequestParameter( sheetName ),addTitleSheet );
1246        }
1247
1248        /**
1249         * 【TAG】チェック行のみを対象にするかを指定します(初期値:true)。
1250         *
1251         * @og.tag
1252         * falseを指定する事で、前画面でチェックした行のみを出力します。
1253         * 初期値は全ての行を出力(true)です。
1254         * 出力されるファイルの行番号は、1から振りなおされます。
1255         *
1256         * @og.rev 5.5.5.5 (2012/08/24) 新規作成
1257         *
1258         * @param   flag 対象にするか [true:全件/false:対象のみ]
1259         */
1260        public void setSelectedAll( final String flag ) {
1261                selectedAll = nval( getRequestParameter( flag ),selectedAll );          // 5.5.9.1 (2012/12/07) バグ対応
1262        }
1263
1264        /**
1265         * 【TAG】事前にファイルを削除するかどうかを指定します(初期値:false)。
1266         *
1267         * @og.tag
1268         * 出力元の DBTableModel が、存在しないか、0件の場合、過去に作成したファイルが
1269         * そのまま、残っていると、不要なトラブルのもととなる為、実行前に削除するか
1270         * どうかを指定できます。
1271         * なお、fileAppend="true"(追加モードで書き込むを指定)時には、データが0件でも
1272         * 事前削除は行いません。
1273         * 初期値は互換性のため削除しない(false)です。
1274         *
1275         * @og.rev 5.5.9.1 (2012/12/07) 新規作成
1276         *
1277         * @param   flag 事前削除するかどうか [true:削除する/false:削除しない]
1278         */
1279        public void setBeforeDelete( final String flag ) {
1280                beforeDelete = nval( getRequestParameter( flag ),beforeDelete );
1281        }
1282
1283        /**
1284         * WriteTable オブジェクトに渡すパラメータオブジェクトをセットします。
1285         *
1286         * WriteTableParamTag クラスよりセットされます。
1287         *
1288         * @og.rev 4.0.0.0 (2005/02/28) 新規追加
1289         *
1290         * @param   entry HybsEntryオブジェクト
1291         */
1292        protected void addParam( final HybsEntry entry ) {
1293                if( param == null ) { param = new ArrayList<>(); }
1294                param.add( entry );
1295        }
1296
1297        /**
1298         * このオブジェクトの文字列表現を返します。
1299         * 基本的にデバッグ目的に使用します。
1300         *
1301         * @return このクラスの文字列表現
1302         * @og.rtnNotNull
1303         */
1304        @Override
1305        public String toString() {
1306                return ToString.title( this.getClass().getName() )
1307                                .println( "VERSION"                     ,VERSION                )
1308                                .println( "BASE_URL"            ,BASE_URL               )
1309                                .println( "separator"           ,separator              )
1310                                .println( "headerSequence"      ,headerSequence )
1311                                .println( "fileURL"                     ,fileURL                )
1312                                .println( "filename"            ,filename               )
1313                                .println( "refFileURL"          ,refFileURL             )
1314                                .println( "refFilename"         ,refFilename    )
1315                                .println( "encode"                      ,encode                 )
1316                                .println( "writerClass"         ,writerClass    )
1317                                .println( "fileAppend"          ,fileAppend             )
1318                                .println( "direct"                      ,direct                 )
1319                                .println( "zip"                         ,zip                    )
1320                                .println( "zipFilename"         ,zipFilename    )               // 6.0.4.0 (2014/11/28)
1321                                .println( "disposition"         ,disposition    )
1322                                .println( "tableId"                     ,tableId                )
1323                                .println( "sheetName"           ,sheetName              )
1324                                .println( "refSheetName"        ,refSheetName   )
1325                                .println( "useNumber"           ,useNumber              )
1326                                .println( "Other..."    ,getAttributes().getAttribute() )
1327                                .fixForm().toString() ;
1328        }
1329}