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