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