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